Mingw-gcc结构体取消对齐

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

         在gcc中,一般是可以通过__attribute__((packed))属性来取消对齐的,昨天在写个小工具是发现在使用code::block+mingw-gcc时却是死活不行了,无奈之下,只有在虚拟机里面使用gcc编译了。

        今天差不多忙完了,来查查原因来了,原来MinGW-GCC是默认启动了兼容MS的特性的,

        相关的GCC的说明查看http://gcc.gnu.org/onlinedocs/gcc/Type-Attributes.html

摘抄如下

Two attributes are currently defined for i386 configurations: ms_struct and gcc_struct.

ms_struct
gcc_struct
    If packed is used on a structure, or if bit-fields are used it may be that the Microsoft ABI packs them differently than GCC normally packs them. Particularly when moving packed data between functions comp
【Linux+C】GCC编译器的结构体对齐指令 gcc推荐的结构体对齐指令        __attribute__((packed))        __attribute__((aligned(n))) 举例说明其用法 (1) “__attribute__((packed))”使用时直接放在要进行内存对齐的类型定义的后面,然后它起作用的范围只有加了这个东西的这一个类型。packed的作用就是取消对齐访问。 #include &l... 阅读详情

相关推荐

mex -setup命令 错误使用 mex问题【MATLAB 安装MinGW-w64编译器】

恭喜入坑!解决mex -setup命令  错误使用 mex问题借鉴https://cn.mathworks.com/matlabcentral/answers/313298-i-already-have-mingw-on-my-computer-how-do-i-configure-it-to-work-with-matlab首先下载MinGW-w64编译器下载地址http://tdm-gcc.t...

Cethy‘s Learning Notes 2万+

C语言结构体对齐与不对齐设置总结

参考: 相信不同的编译平台间的默认设置差异给大家带来了很多困扰。在此,仅就结构体对齐解析下之间的差异设置方法。 1.gcc结构体默认是4个字节对齐,即为32的倍数。 1.1修改字节对齐: struct data{ int a; char b; char c; }__attribute__((aligned(8))) data; 或 #pragma pa

gll028的专栏 1万+

Windows下Qt项目GCC版本升级实战:从MinGW到MSYS2完整指南

在C++开发中,编译器工具链的升级是保持技术栈现代化的关键环节。GCC作为广泛使用的开源编译器,其新版本不仅支持C++17/20等最新语言标准特性,还带来了更好的代码优化和错误诊断能力。从技术原理上看,编译器升级涉及ABI(应用二进制接口)兼容性,这要求应用程序、依赖库和运行时环境必须使用同一套工具链编译,否则会导致链接错误或运行时崩溃。在Windows平台上,由于缺乏原生GCC支持,开发者通常依赖MinGW-w64项目提供的工具链。通过使用MSYS2这样的软件发行版,可以方便地管理多个GCC版本,并构建与

深未来技术 486

__attribute__ 详解

GNU C的一大特色(却不被初学者所知)就是__attribute__机制。__attribute__可以设置函数属性(Function     Attribute)、变量属性(Variable Attribute)和类型属性(Type Attribute)。 __attribute__书写特征是:__attribute__前后都有两个下划线,并切后面会紧跟一对原括弧,括弧里面是相应的__att

三多 2784

gcc结构体对齐的误用

最近对一段声卡裸板程序进行调试时发现了一个结构体对齐误用的错误。在接有wm8976的s3c2440开发板上调试裸板程序,用来解析并播放NandFlash上的wav二进制数据,使用dma传输数据到iis接口,并在传输完毕后触发中断再次传输。然而结果是既没有声音,dma中断也没有被触发,以为是dma的设置出错,经过反复试验后,将问题定位到了iis的部分代码: struct i2s_regs {

yjfreedom的博客 1766

pragma pack 对齐用法

      为了搞清楚#pragma pack(n)的写法,Test一下。下面这段测试代码贴在任意一个控制台程序的面前面即可。//windowsxp+vs2008//#pragma pack(show) //8#pragma pack(push, 2) //压栈8,设置2//#pragma pack(show) //2#pragma pack(push, 4) //压栈2,

shellching的专栏 1624

eclipse中没有MinGW GCC/Cross GCC/Cygwin GCC/linux GCC/MacOSX GCC/MinGW GCC/Solaris GCC(编译器)

问题:Eclipse环境安装C/C++插件CDT用来编写:C、C++、Objective-C、Fortran、Java、Ada和Go语言的程序! 描述:安装MinGW[C/C++编译平台],GDB[C/C++调试平台]成功了,但是创建工程(C Project 或 C++ Project)的时候找不到:             MinGW GCC/Cross GCC/Cygwin GCC/lin

学习笔记 1万+

关于结构体字节对齐

结构体字节对齐 在用sizeof运算符求算某结构体所占空间时,并不是简单地将结构体中所有元素各自占的空间相加,这里涉及到内存字节对齐的问题。从理论上讲,对于任何变量的访问都可以从任何地址开始访问,但是事实上不是如此,实际上访问特定类型的变量只能在特定的地址访问,这就需要各个变量在空间上按一定的规则排列,而不是简单地顺序排列,这就是内存对齐。 内存对齐的原因: ...

qq_15309945的博客 183

内存对齐

1.引子 在结构中,编译器为结构的每个成员按其自身的自然对界(alignment)条件分配空间。各个成员按照它们被声明的顺序在内存中顺序存储,第一个成员的地址和整个结构的地址相同。 例如,下面的结构各成员空间分配情况(假设对齐方式大于2字节,即#pragma pack(n), n = 2,4,8...下文将讨论#pragmapack()): struct test { ...

1592

MATLAB调用C++代码实战:用TDM-GCC替代MinGW的正确姿势

本文详细介绍了如何在MATLAB中使用TDM-GCC替代MinGW来编译C++代码的正确方法。通过对比TDM-GCCMinGW的兼容性和性能优势,提供从安装配置到环境变量设置的完整步骤,帮助开发者解决MATLAB调用C++代码时的常见问题,实现高效编译与集成。

d6e7f8的博客 906

Windows系统下使用MSYS2配置MinGW-w64 GCC开发环境完整指南

GCC(GNU Compiler Collection)是C/C++开发中广泛使用的开源编译器套件,其核心原理是将源代码通过预处理、编译、汇编、链接等阶段转换为可执行程序。在跨平台开发中,GCC提供了标准化的编译工具链,确保代码在不同系统间的可移植性。对于Windows开发者而言,原生缺乏GCC环境常成为开发障碍,而MinGW-w64技术方案通过提供完整的GNU工具链移植,实现了在Windows平台进行原生应用开发的能力。通过MSYS2环境管理器,开发者可以便捷地安装、管理和切换不同版本的GCC工具链,并集

ciya3282的博客 316

两种安装MinGW的方法

MinGW 的全称是:Minimalist GNU on Windows 。它实际上是将经典的开源 C语言 编译器 GCC 移植到了 Windows 平台下,并且包含了 Win32API ,因此可以将源代码编译为可在 Windows 中运行的可执行程序。而且还可以使用一些 Windows 不具备的,Linux平台下的开发工具。一句话来概括:MinGW 就是 GCC 的 Windows 版本 。 MinGW-w64 与 MinGW 的区别在于 MinGW 只能编译生成32位可执行程序,而 MinGW-w64

小弱鸡的博客 6750

C/C++结构体从入门到精通:定义、内存对齐与实战应用

在C/C++编程中,自定义数据类型是构建复杂数据模型的核心基础。结构体(struct)作为一种用户自定义的复合数据类型,其原理在于将多个不同类型的变量组合成一个单一的逻辑单元,从而增强数据的组织性和代码的可读性。这一技术价值在于它能将现实世界的实体(如学生、坐标点)映射为程序中的数据结构,解决了使用多个独立变量管理相关数据时逻辑关联弱、管理繁琐的问题。在应用场景上,结构体广泛应用于数据记录管理、图形学坐标表示、链表与树等数据结构节点定义,以及嵌入式开发中的硬件寄存器映射。本文聚焦于结构体的核心用法,深入探讨

weixin_33911824的博客 409

GNU、GCCMinGW与MSVC:四大编译生态的起源、定位与实战选择

本文深入解析GNU、GCCMinGW和MSVC四大编译生态的起源、定位及实战应用。GNU作为自由软件运动的基石,提供了完整的开发工具链;GCC是跨平台编译的瑞士军刀;MinGW在Windows上搭建GNU桥梁;MSVC则是Windows开发的终极武器。文章还提供了针对不同开发场景的编译器选择指南,帮助开发者根据项目需求做出最优决策。

weixin_30633405的博客 154

MATLAB2 016b和tmd64-gcc-4.9.2的巨坑

MATLAB2 016b安装MinGW64配套可用tmd64-gcc-4.9.2安装的巨坑 MinGW可以用TDM-GCC代替,下载装这个方便 文章目录 MATLAB2 016b文档上要求是4.9.2版本tmd64-gcc-4.9.2 一、第一步下载tdm64-gcc-4.9.2.exe 二、安装步骤 1.双击4.9.2.exe文件安装; 2 一直next下一步 3 选择自己的文件夹 4 安装完成 三、环境变量配置 四、检验是否配置成功 MATLAB2 016b文.

DayDayUp 3497

Win10下MinGW安装gcc/g++踩坑实录:从下载到环境配置的全流程指南

本文详细介绍了在Windows10系统下安装和配置MinGW-w64以使用gcc/g++编译器的全流程指南。从选择合适的MinGW发行版到解决常见的网络下载失败和DLL缺失问题,再到环境配置的进阶技巧和VSCode集成,帮助开发者高效搭建C/C++开发环境。

weixin_33737134的博客 467

新发的日常学习——使用MinGW编译和运行C/C++代码(gcc/g++/gdb)

文章目录一、前言二、MinGW下载三、配置环境变量四、编写C程序五、使用gcc命令编译C代码六、使用gdb运行程序七、gdb断点和单步运行 一、前言 我们做实验的时候,写些C/C++的小Demo,如果不想打开超级占内存的VS,我们可以使用MinGWgcc或g++工具对我们的小Demo进行编译成可执行程序。 二、MinGW下载 MinGW,是Minimalist GNUfor Windows的缩写。Windows下我们可以使用MinGW在命令行编译运行C/C++程序。 MinGW官网:http://www.

linxinfa的专栏 4032

MinGW安装教程

首先说明一下 1) MinGw只是其中一种GCC编译环境的安装程序,还有像Cygwin也是差不多的; 2) 由于安装的时候有些地方忘了截图,所以图有些是借鉴别人的; 3) 还要就是安装MinGw,最好在一个网络比较好的环境中进行, (我就是试过在网络不太稳定的环境中安装,结果有些东西就安装不完整,导致后来安装其他软件像OMNeT++的时候就会失败), (当然其实...

aeftc0163的博客 306
上一篇: C语言编程初讲(一)
下一篇: Cubieboard2折腾手记(一)
Moooz
博客等级 码龄16年 3粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值