在C中为节点分配了多少内存?

时间:2016-08-18 17:00:46

标签: c memory-management data-structures struct nodes

typedef struct Node {
    int data;
    struct Node *next;
} node;

pointer->next = (node*)malloc(sizeof(node));

在上面的代码中,pointer->next动态地给出了多少字节的内存。对于(int*)malloc(sizeof(int)),给出了2个字节。同样node的数量是多少?

3 个答案:

答案 0 :(得分:1)

Malloc会在动态上指定" node"的大小。

Node是一个结构,每个结构的大小取决于结构中每个元素的大小。

在这种情况下,节点的大小将是:int的大小+ struct Node的大小* (如果结果不是2的倍数,则会出于架构原因进行填充) 您的设备具有2个字节的体系结构,因此,结构的大小只能是2,4,6,8等......

int的大小取决于您正在处理的目标。由于您的体系结构是16位,因此int的大小为2个字节。

关于。 struct Node *的大小,您需要知道每个指针数据类型具有完全相同的大小,它们指向的数据类型并不重要。而这个大小也取决于架构。同样,您的体系结构是16位,这就是结构节点*的大小为2个字节的原因。

int = 2的大小。

struct node的大小* = 2

malloc指定的总内存= 2 + 2 = 4

答案 1 :(得分:1)

在不了解您的系统的情况下,我们无法告诉您。您可以使用相同的代码并在多个编译器上进行尝试,您将获得不同的答案。你必须使用sizeof(node)sizeof(struct Node)检查自己(我认为这两种语法都有效,但以防万一)。

答案 2 :(得分:1)

首先,建议:重写

pointer->next=(node*)malloc(sizeof(node));

作为

pointer->next = malloc( sizeof *pointer->next );

你不需要演员表(除非你正在进行ANSI之前的实现,在这种情况下上帝帮助你),并使用解除引用的目标作为sizeof的操作数意味着你不必指定类型,可能会为你节省一些维护胃灼热。

另外,一个小小的空白有很长的路要走(虽然你不需要在功能参数周围添加空白 - 这是我的风格,有些人不喜欢它,但它会让对我来说更容易阅读)。

  

动态地为指针 - >下一个

提供多少字节的内存

至少sizeof (int)sizeof (struct Node *)一样大,可能更大;根据您的平台,它可以小到4个字节或大到16个.C允许"填充" struct成员之间的字节数,以满足底层架构的对齐要求。例如,特定体系结构可能要求所有多字节对象在4的倍数的地址上对齐;如果您的data成员只有2个字节宽,则它与next成员之间将有2个未使用的字节。