void function(int a, int b, int c) {
   char buffer1[5];
   char buffer2[10];
}
  

我们必须记住,内存只能   在这个词的倍数来解决   尺寸。在我们的情况一个字是4个字节,   或32位。因此,我们的5个字节的缓冲区   真的要采取8个字节(2个字)   记忆,和我们的10字节的缓冲区   要采取的12个字节(3个字)   记忆。这就是为什么SP是被   通过20中减去。

为什么它不是小区((5 + 10)/ 4)* 4 = 16

有帮助吗?

解决方案

由于单个变量应该被对齐。随着你提出的公式,你将纸叠仅在第一个变量,留下下面的变量未对齐,这是不好的性能。

此也被称为“填料”,并且可以在C / C ++编译指示与进行,但仅在非常特殊的情况下是有用和既可以是针对性能和作为潜在的运行时的陷阱的原因危险。一些处理器将产生在运行时不对齐访问,这将崩溃的程序错误。

其他提示

在你的架构中的变量分别排列。缓冲器1得到向上舍入到8 1和缓冲器2到12,使得两个其开始地址是对齐的4个字节。所以8 + 12 = 20。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top