我对我的gcc编译器的大小分配感到困惑,任何人都可以帮助我如何为以下代码分配大小。
sizeof(struct node)
struct node
{
int data;
};
的输出为16。
sizeof(struct node)
struct node
{
struct node *next;
};
的输出为4。
sizeof(struct node)
struct node
{
int data;
struct node *next;
}*link;
的输出为8。
sizeof(link)
class Avaria(models.Model):
freguesia = models.ForeignKey(Freguesia, on_delete=models.CASCADE,verbose_name="Freguesia")
rua = models.ForeignKey(Rua, on_delete=models.CASCADE,verbose_name="Rua")
始终为8,即使我在结构中添加了几个元素。
答案 0 :(得分:1)
在您的特定平台上,看起来int
的大小为4,指针的大小为8。它似乎还想将指针对齐8字节边界。
因此,如果struct node
仅包含int
,则其大小为4。如果仅包含指针,则其大小为8。如果同时包含int
和a指针,则需要12个字节,但是为了保持指针的对齐,它将结构填充为8的倍数,结果大小为16。
在最后一个示例中,您将link
定义为指向struct node
的指针。在这种情况下,struct node
包含什么都没有关系。由于link
只是一个指针,因此其大小将始终为8。
同样,请注意,这只是对您的平台的最佳猜测。不能保证所有这些,它可能因一个平台而异。
答案 1 :(得分:0)
sizeof(link)
将始终返回8个字节,因为这是64位计算机中指针的大小。
如果您想要结构的大小,则需要执行sizeof(struct node)
,因为它会为您提供实际结构的大小。
对于链接列表类型的结构,我会向您推荐这样的内容
typedef struct node Node, *pnode;
struct node{
//some vars
pnode next;
}
然后,您只需要声明它的主要名称或其他任何位置
pnode list = NULL;
sizeof(Node) //for memory allocation
答案 2 :(得分:0)
sizeof
返回的字节数int
具有32位= 4字节char*
,struct any*
的const sizeof取决于内存结构,在您的情况下为8。#pragma pack(1)
并查看差异,应该为4 + 8 = 12