谁能解释一下在以下情况下如何分配大小?
Can any one explain me how the size get allocated in the following case?
我对 gcc 编译器的大小分配感到困惑,任何人都可以帮助我如何为以下代码分配大小。
struct node
{
int data;
struct node *next;
};
sizeof(struct node)
输出为 16。
struct node
{
int data;
};
sizeof(struct node)
输出为 4.
struct node
{
struct node *next;
};
sizeof(struct node)
输出为 8.
struct node
{
int data;
struct node *next;
}*link;
sizeof(link)
始终为 8,即使我向结构中添加了更多元素。
sizeof(link)
将始终 return 8 个字节,因为这是 64 位计算机中指针的大小。
如果你想要结构的大小,你需要做 sizeof(struct node)
因为它会给你实际结构的大小。
对于链表类型的结构,我会向您推荐这样的东西
typedef struct node Node, *pnode;
struct node{
//some vars
pnode next;
}
然后你只需要将它声明为你的主要或任何你作为
pnode list = NULL;
sizeof(Node) //for memory allocation
sizeof
return 字节大小
int
有 32 位 = 4 字节
- 任何指针
char*
、struct any*
都有 const sizeof 取决于内存结构,在你的例子中是 8。
- 因为内存分配,你的第一个例子有 sizeof = 16,更多在这里:https://en.wikipedia.org/wiki/Data_structure_alignment,你可以添加
#pragma pack(1)
并查看差异,应该是 4 + 8 = 12
在您的 特定平台 上,看起来 int
的大小为 4,指针的大小为 8。它看起来还想将指针对齐到8 字节边界。
所以如果struct node
只包含一个int
,那么它的大小是4。如果它只包含一个指针,它的大小是8。如果它同时包含一个int
和一个指针,那么它需要12个字节,但是为了保持指针的对齐,它将结构填充为8的倍数,结果大小为16.
在最后一个示例中,您将 link
定义为指向 struct node
的指针。在这种情况下,struct node
包含什么并不重要。因为 link
只是一个指针,所以它的大小总是 8。
再次请注意,这只是对您的 平台的最佳猜测。 None 这是有保证的,它可能因平台而异。
我对 gcc 编译器的大小分配感到困惑,任何人都可以帮助我如何为以下代码分配大小。
struct node
{
int data;
struct node *next;
};
sizeof(struct node)
输出为 16。
struct node
{
int data;
};
sizeof(struct node)
输出为 4.
struct node
{
struct node *next;
};
sizeof(struct node)
输出为 8.
struct node
{
int data;
struct node *next;
}*link;
sizeof(link)
始终为 8,即使我向结构中添加了更多元素。
sizeof(link)
将始终 return 8 个字节,因为这是 64 位计算机中指针的大小。
如果你想要结构的大小,你需要做 sizeof(struct node)
因为它会给你实际结构的大小。
对于链表类型的结构,我会向您推荐这样的东西
typedef struct node Node, *pnode;
struct node{
//some vars
pnode next;
}
然后你只需要将它声明为你的主要或任何你作为
pnode list = NULL;
sizeof(Node) //for memory allocation
sizeof
return 字节大小int
有 32 位 = 4 字节- 任何指针
char*
、struct any*
都有 const sizeof 取决于内存结构,在你的例子中是 8。 - 因为内存分配,你的第一个例子有 sizeof = 16,更多在这里:https://en.wikipedia.org/wiki/Data_structure_alignment,你可以添加
#pragma pack(1)
并查看差异,应该是 4 + 8 = 12
在您的 特定平台 上,看起来 int
的大小为 4,指针的大小为 8。它看起来还想将指针对齐到8 字节边界。
所以如果struct node
只包含一个int
,那么它的大小是4。如果它只包含一个指针,它的大小是8。如果它同时包含一个int
和一个指针,那么它需要12个字节,但是为了保持指针的对齐,它将结构填充为8的倍数,结果大小为16.
在最后一个示例中,您将 link
定义为指向 struct node
的指针。在这种情况下,struct node
包含什么并不重要。因为 link
只是一个指针,所以它的大小总是 8。
再次请注意,这只是对您的 平台的最佳猜测。 None 这是有保证的,它可能因平台而异。