假设我有一个包含其他结构体的大型结构体,那么使用gcc -os
或者任何其他gcc优化开关会改变它在内存中的存储方式吗?也就是说,它会压缩结构体以释放一些额外的空间吗?
谢谢。
假设我有一个包含其他结构体的大型结构体,那么使用gcc -os
或者任何其他gcc优化开关会改变它在内存中的存储方式吗?也就是说,它会压缩结构体以释放一些额外的空间吗?
谢谢。
gcc
中结构的本机平台对齐方式,则必须明确使用__attribute__((packed))
或__attribute__((align X))
编译器指令,或其他gcc
命令行开关,以明确指示编译器更改数据结构的本机平台对齐方式。-malign = ...
,并且您可能会在 -m32
和 -m64
之间获得差异。 - Paul R#pragma pack
而不是__attribute__
。主要是因为我从来不喜欢属性语法,但也部分原因是支持它的编译器之间的#pragma pack语法相当相似。 - Brian McFarland-O
设置生成的,那么在一个翻译单元中生成的代码可能与在另一个翻译单元中使用结构/类时期望的布局不匹配。这将是一场噩梦,所以你可以看到为什么这不是一个选项,正如之前的帖子指出的那样。 - Cecil Ward-Os
优化二进制文件大小(即通常称为代码大小),而不是内存压缩。