C堆栈分配大小
我正在尝试回答关于以下代码的测验:
struct B {
int _arr[5];
};
struct A{
struct B* _b;
};
#include <stdlib.h>
int main(){
struct A arr[5];
struct A * a = (struct A*)malloc(sizeof (struct A));
return 0;
}
我想了解程序堆栈上分配了多少内存(以字节为单位)。
所以我首先使用了下面的(也许是错误的)逻辑:
我知道2
实际上是错误的,因为当我打印sizeof(B)时,我感到惊讶8.我真的不明白为什么。
无论如何,要了解在堆栈上分配了多少内存:
arr
的大小是20 * 5 = 100; sizeof(a)
打印sizeof(a)
显示8,但我不明白为什么。 但实际答案是24:/我错过了什么?
谢谢!
正如其他人所说的那样,并没有真正的答案。 这是一个可怕的问题,为了回答它,你必须假设没有被C定义的东西。
虽然这可能不是很有帮助。 既然你知道“正确的”答案,那么找出它们是如何到达它是可能的:
如果您假定32位指针, sizeof(struct A) == 4
因为struct A
的唯一字段是指向struct B
的指针。 所以arr
是4 * 5 = 20
个字节,然后为a
变量(这是另一个指针)添加另外4个字节。
上述评论中关于sizeof(int)
所有讨论都是毫无意义的; 堆栈中没有int
。 或者就此而言,堆; 你永远不会分配任何struct B