有人可以解释我这个特殊的输出:
#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
}
Run Code Online (Sandbox Code Playgroud)
我有一个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);
}
Run Code Online (Sandbox Code Playgroud)
通过分配数组,您可以确保它们在内存中背靠背.
根据您的实施情况malloc,您的系统可能正在使用其间的内存p并q存储由realloc和free,和朋友使用的簿记信息.
| 归档时间: |
|
| 查看次数: |
782 次 |
| 最近记录: |