我正在尝试回答有关以下代码的测验:
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)
显示8,但我不明白为什么。但实际答案是24:/ 我错过了什么?
谢谢!
答案 0 :(得分:2)
正如其他人所说的那样,并没有真正正确的答案。这是一个可怕的问题,为了回答它,你必须假设没有被C定义的东西。
但是,这可能不是很有帮助。既然你知道&#34;正确&#34;回答,很可能弄清楚他们是如何做到的:如果您假设32位指针sizeof(struct A) == 4
,那么struct A
唯一字段是指向struct B
的指针。所以arr
是4 * 5 = 20
个字节,然后为a
变量添加另外4个字节(这是另一个指针)。
上述评论中sizeof(int)
的所有谈话都毫无意义;堆栈上没有int
个。或者堆,就此而言;你永远不会真正分配任何struct B
。