C++ 什么';一个节点的大小是多少?数据保存在哪里?

C++ 什么';一个节点的大小是多少?数据保存在哪里?,c++,pointers,linked-list,C++,Pointers,Linked List,正如问题所暗示的,通常节点的大小是多少: struct node{ int data; node* next; }; 如果结构包含下一个节点的数据和地址,那么指针地址的大小是多少(而不是指向什么)? 如果下一个值指向NULL,是否有差异 如果我创建了“新节点”,数据(不是指针)保存在哪里,堆栈还是堆 如果我创建了类节点,答案是否会更改?无论成员值是什么,结构的大小都是固定的。在这种情况下,它可能是8或16字节(取决于您是在32位还是64位平台上)。如果选中例如sizeof(node

正如问题所暗示的,通常节点的大小是多少:

struct node{
   int data;
   node* next;
};
如果结构包含下一个节点的数据和地址,那么指针地址的大小是多少(而不是指向什么)? 如果下一个值指向NULL,是否有差异

如果我创建了“新节点”,数据(不是指针)保存在哪里,堆栈还是堆


如果我创建了类节点,答案是否会更改?

无论成员值是什么,结构的大小都是固定的。在这种情况下,它可能是8或16字节(取决于您是在32位还是64位平台上)。如果选中例如
sizeof(node)
,则会报告此情况

大小的差异取决于32位或64位平台,这是因为指针。指针在32位平台上为32位(即4字节),在64位平台上为64位(即8字节)。在所有平台上,
int
类型通常为32位(4字节),但在嵌入式系统或大型机上可能不同


在64位平台上不是12字节(4+8)的原因是对齐。编译器将确保指针处于良好的对齐状态,以加快对该成员的访问。

无论成员值是什么,结构的大小都是固定的。在这种情况下,它可能是8或16字节(取决于您是在32位还是64位平台上)。如果选中例如
sizeof(node)
,则会报告此情况

大小的差异取决于32位或64位平台,这是因为指针。指针在32位平台上为32位(即4字节),在64位平台上为64位(即8字节)。在所有平台上,
int
类型通常为32位(4字节),但在嵌入式系统或大型机上可能不同


在64位平台上不是12字节(4+8)的原因是对齐。编译器将确保指针处于良好的对齐状态,以加快对该成员的访问。

您可以使用
sizeof()
函数轻松检查这些指针,该函数不仅将指针应用于
int
和指针变量,而且应用于节点本身。通常,
int
s和指针在32位平台上为4字节,因此这是实现定义的,在其他平台上可能有所不同。
节点
的总大小可能等于8,但可能不是由于上面指定的原因和\或数据对齐。

您可以使用
sizeof()
函数轻松检查这些大小,该函数不仅将其应用于
int
和指针变量,而且应用于节点本身。通常,
int
s和指针在32位平台上为4字节,因此这是实现定义的,在其他平台上可能有所不同。
节点
的总大小可能等于8,但可能不是由于上面指定的原因和\或数据对齐。

这是实现定义的,我们无法给出答案,只有您平台上的编译器可以。这取决于具体情况。请参阅:考虑构件的大小和对齐方式。这些限制了整个班级的规模和一致性。(考虑
节点[N]
)这是实现定义的,我们不能给你答案,只有你平台上的编译器可以。这取决于。请参阅:考虑构件的大小和对齐方式。这些限制了整个班级的规模和一致性。(考虑
节点[N]
)我认为它不可能是12字节,除非有一些非常奇怪的对齐松弛。@KerrekSB你可能是对的。更新了答案,并对原因做了一个小的解释。@JoachimPileborg:我认为这个解释有点离题。即使你颠倒了会员顺序,大小也会是16,而不是12。很多旧电脑都有16位
int
;根据指针的大小,它们的大小应该是4或6。在某些嵌入式系统上可能仍然是这样。@KerrekSB可能被称为“非常奇怪”,但在Unisys大型机上,大小应该是12:一个6字节的int和一个6字节的指针。我认为它不可能是12字节,除非有一些非常奇怪的对齐松弛。@KerrekSB你可能是对的。更新了答案,并对原因做了一个小的解释。@JoachimPileborg:我认为这个解释有点离题。即使你颠倒了会员顺序,大小也会是16,而不是12。很多旧电脑都有16位
int
;根据指针的大小,它们的大小应该是4或6。在某些嵌入式系统上可能仍然是这样。@KerrekSB可能被称为“非常奇怪”,但在Unisys大型机上,大小将是12:一个6字节的整数和一个6字节的指针。“通常”在32位平台上。“通常”在32位平台上。
node* linkednode= new node;