Может кто-то пожалуйста, объясните мне этот своеобразный выход:выделение памяти для структур
#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-битной машины?
Было бы полезно, если бы кто-то объяснил мне, почему я получил ожидаемый результат на 32-битной машине, а не как таковой на моей 64-битной машине ... – letsc
32-байтовое разделение не связано с требованием ' malloc'. Вы можете видеть, что адреса не выровнены по 32 байт, поэтому для этого не будет большого преимущества. Может быть, мы сможем более точно узнать, какой компилятор/платформа у вас есть. – Potatoswatter