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;
}

我想了解程序堆栈上分配了多少内存(以字节为单位)。

所以我首先使用了下面的(也许是错误的)逻辑:

  • 计算结构B的大小= sizeof(int)* 5 = 20;
  • 计算结构A的大小= sizeof(B)= 20
  • 我知道2实际上是错误的,因为当我打印sizeof(B)时,我感到惊讶8.我真的不明白为什么。

    无论如何,要了解在堆栈上分配了多少内存:

  • 根据我的逻辑, arr的大小是20 * 5 = 100;
  • 关于* a,我不知道。 sizeof(a)打印sizeof(a)显示8,但我不明白为什么。
  • 总和是108
  • 但实际答案是24:/我错过了什么?

    谢谢!


    正如其他人所说的那样,并没有真正的答案。 这是一个可怕的问题,为了回答它,你必须假设没有被C定义的东西。

    虽然这可能不是很有帮助。 既然你知道“正确的”答案,那么找出它们是如何到达它是可能的:

    如果您假定32位指针, sizeof(struct A) == 4因为struct A的唯一字段是指向struct B的指针。 所以arr4 * 5 = 20个字节,然后为a变量(这是另一个指针)添加另外4个字节。

    上述评论中关于sizeof(int)所有讨论都是毫无意义的; 堆栈中没有int 。 或者就此而言,堆; 你永远不会分配任何struct B

    链接地址: http://www.djcxy.com/p/80213.html

    上一篇: C stack allocation size

    下一篇: Does printf() allocate memory in C?