【问题标题】:Structure memory allocation结构内存分配
【发布时间】:2010-11-20 22:00:20
【问题描述】:
struct node{
  int data;
  struct node * next;
};

当我们还没有为结构“struct node”分配内存时,编译器如何为“下一个”成员分配内存

【问题讨论】:

    标签: c pointers structure


    【解决方案1】:

    成员 next 是一个指针。指针的大小都是一样的,所以编译器不需要知道 next 可能指向的东西有多大。

    【讨论】:

    • 也就是说,编译器为“next”分配了足够的空间来存储节点结构中指向节点的指针。要真正使用“next”,您必须进行另一个分配调用来填充下一个结构。
    【解决方案2】:

    Next 只是一个指针,所以它在每台机器上都是一个固定大小的值,它只会添加 int+pointer sizes + padding 并分配节点结构

    【讨论】:

      【解决方案3】:

      next 成员是一个指针 - 一个包含node 地址的变量,而不是node 本身。所有数据类型指针通常大小相同,因此编译器知道它是能够计算其大小的指针就足够了。

      【讨论】:

        【解决方案4】:

        当您使用 malloc 时,它会动态发生。否则什么都不分配。 编译器所做的只是为指针分配 4 个字节,该指针将保存 “待”分配内存的地址。如果您尝试访问指针而不分配 任何内存,代码都会崩溃(你最终会访问程序中的一些无效内存)

        【讨论】:

          猜你喜欢
          • 2016-01-27
          • 1970-01-01
          • 2022-08-20
          • 1970-01-01
          • 1970-01-01
          • 2011-06-01
          • 2021-05-12
          • 1970-01-01
          相关资源
          最近更新 更多