【发布时间】:2010-11-20 22:00:20
【问题描述】:
struct node{
int data;
struct node * next;
};
当我们还没有为结构“struct node”分配内存时,编译器如何为“下一个”成员分配内存
【问题讨论】:
struct node{
int data;
struct node * next;
};
当我们还没有为结构“struct node”分配内存时,编译器如何为“下一个”成员分配内存
【问题讨论】:
成员 next 是一个指针。指针的大小都是一样的,所以编译器不需要知道 next 可能指向的东西有多大。
【讨论】:
Next 只是一个指针,所以它在每台机器上都是一个固定大小的值,它只会添加 int+pointer sizes + padding 并分配节点结构
【讨论】:
next 成员是一个指针 - 一个包含node 地址的变量,而不是node 本身。所有数据类型指针通常大小相同,因此编译器知道它是能够计算其大小的指针就足够了。
【讨论】:
当您使用 malloc 时,它会动态发生。否则什么都不分配。 编译器所做的只是为指针分配 4 个字节,该指针将保存 “待”分配内存的地址。如果您尝试访问指针而不分配 任何内存,代码都会崩溃(你最终会访问程序中的一些无效内存)
【讨论】: