C 堆栈分配大小
C stack allocation size
我正在尝试回答有关以下代码的测验:
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:/
我错过了什么?
谢谢!
正如其他人所提到的,没有真正正确的答案。这是一个可怕的问题,为了回答它,你必须假设 C 没有定义的东西。
不过,这可能不是很有帮助。由于您知道 "correct" 答案,因此有可能弄清楚他们是如何得出答案的:
如果您假设 32 位指针,sizeof(struct A) == 4
因为 struct A
的唯一字段是指向 struct B
的指针。所以 arr
是 4 * 5 = 20
字节,然后为 a
变量(这是另一个指针)再添加 4 个字节。
以上评论中所有sizeof(int)
的讨论都是毫无意义的;堆栈上没有 int
。或者堆,就此而言;你实际上从未分配任何 struct B
s.
我正在尝试回答有关以下代码的测验:
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:/ 我错过了什么?
谢谢!
正如其他人所提到的,没有真正正确的答案。这是一个可怕的问题,为了回答它,你必须假设 C 没有定义的东西。
不过,这可能不是很有帮助。由于您知道 "correct" 答案,因此有可能弄清楚他们是如何得出答案的:
如果您假设 32 位指针,sizeof(struct A) == 4
因为 struct A
的唯一字段是指向 struct B
的指针。所以 arr
是 4 * 5 = 20
字节,然后为 a
变量(这是另一个指针)再添加 4 个字节。
以上评论中所有sizeof(int)
的讨论都是毫无意义的;堆栈上没有 int
。或者堆,就此而言;你实际上从未分配任何 struct B
s.