c/c++ 为什么函数中定义变量不会出现像 struct 中因内存对齐而导致的空间浪费
例如在struct
中
int a;
char b;
int c;
b
后面会有 3Byte 浪费的空间。
但是在函数中同样顺序定义变量 a b c
却不会出现这样的浪费。并且顺序a b c
三个变量的地址顺序和声明顺序不一样。如果这是编译器对函数中声明变量的优化的话,为什么不对 struct
的变量顺序也优化一下呢。
c/c++ 为什么函数中定义变量不会出现像 struct 中因内存对齐而导致的空间浪费
例如在struct
中
int a;
char b;
int c;
b
后面会有 3Byte 浪费的空间。
但是在函数中同样顺序定义变量 a b c
却不会出现这样的浪费。并且顺序a b c
三个变量的地址顺序和声明顺序不一样。如果这是编译器对函数中声明变量的优化的话,为什么不对 struct
的变量顺序也优化一下呢。
2 回答1.7k 阅读✓ 已解决
2 回答1k 阅读✓ 已解决
1 回答1.6k 阅读✓ 已解决
1 回答1.1k 阅读✓ 已解决
1 回答937 阅读
1 回答1.1k 阅读
2 回答1.1k 阅读
非常有意思的问题,网上找到两个回答
第一个说函数本地变量也应该内存对齐:https://bytes.com/topic/c/ans...
第二个说本地变量对齐的代价是非常大的(在3.6.2的开头):https://www.cl.cam.ac.uk/tech...
我自己写了c语言程序
然后用gcc编译为汇编后的关键部分为
可以看到struct确实有内存对齐,但是内部变量之间就没有了。个人猜测函数内部变量如果能做到内存对齐那效率自然是最高的。但是这个的难度很大,因为函数内部的变量有可能不是连续的,而struct内部的东西天然就是连续的