gpt4 book ai didi

c - 结构的内存分配

转载 作者:太空宇宙 更新时间:2023-11-04 00:22:47 24 4
gpt4 key购买 nike

谁能解释一下这个奇怪的输出:

#include <stdio.h>

typedef struct node
{
int i;
struct node *next;
}node;

main()
{
node *p,*q;
printf(" %u ",sizeof(node)); // 16
p = (node *)malloc(sizeof ( node ) ) ;
printf(" %p ",p); // 0x1cea010
q = (node *)malloc(sizeof ( node ) ) ;
printf("\n %p ",q); // 0x1cea030
}

我有一个 64 位处理器。当大小显示为16字节时,为什么为节点分配了32字节??我检查了一台 32 位机器。地址有 8 个字节的分隔。没有填充物和东西。那么 4 个字节的差异是否仅仅是 64 位机器的某些填充问题的原因??

最佳答案

两次 malloc 调用不一定会返回连续的内存区域。进行此测试的更好方法是:

main()
{
node *p;
printf(" %u ",sizeof(node));
p = (node*)malloc(2 * sizeof (node));
printf(" %p \n %p ", &p[0], &p[1]);
free(p);
}

通过分配数组,您可以确保它们在内存中是背靠背的。

根据您对 malloc 的实现,您的系统可能会使用 pq 之间的内存来存储使用的簿记信息通过 reallocfree 和 friend 。

关于c - 结构的内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3884382/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com