【发布时间】:2018-06-29 02:39:43
【问题描述】:
我正在尝试回答有关以下代码的测验:
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;
}
我试图了解在程序的堆栈上分配了多少内存(以字节为单位)。
所以我首先使用了以下(可能是错误的)逻辑:
- 结构 B 的计算大小 = sizeof(int) * 5 = 20;
- 结构 A 的计算大小 = sizeof(B) = 20
我知道2 实际上是错误的,因为当我打印 sizeof(B) 时,我得到了一个令人惊讶的 8。我真的不明白为什么。
无论如何,要了解堆栈上分配了多少内存:
-
arr的大小按照我的逻辑是20 * 5 = 100; - 关于*a,我真的不知道。打印
sizeof(a)显示 8,但我还是不明白为什么。 - 总和是 108
但实际答案是 24 :/ 我错过了什么?
谢谢!
【问题讨论】:
-
“实际答案”是“不能说”。
-
结构 A = sizeof(B) = 20... 的计算大小应该是:
Calculated size of struct A = sizeof(*B) = sizeof(pointer for the arch) -
不太可能
sizeof(struct A) == sizeof(struct B)。你错过了这个练习的关键部分,指针与指针。 -
这个问题没有明确的答案。例如,是什么让您认为
sizeof(int)是 4? C 语言确实指定了int的大小。 -
C 标准并没有说一定要有栈。但是,我怀疑 在程序堆栈上分配的字节数 总是非负数,通常是整数...:D
标签: c memory struct heap-memory stack-memory