While attempting to create a memory manager for future C programs, I've come across this question:
"when structs are allocated, are their member fields stored in the order specified?"
For instance, consider the following struct.
typedef struct {
int field1;
int field2;
char field3;
} SomeType;
When allocated, will the memory addresses of the fields be in the order field1, field2, field3? Or is this not guaranteed?
Best Answer-推荐答案 strong>
Short answer: they are allocated with the order as they declared in the struct.
Example:
#include <stdio.h>
#include <string.h>
struct student
{
int id1;
int id2;
char a;
char b;
float percentage;
};
int main()
{
int i;
struct student record1 = {1, 2, 'A', 'B', 90.5};
printf("size of structure in bytes : %d\n",
sizeof(record1));
printf("\nAddress of id1 = %u", &record1.id1 );
printf("\nAddress of id2 = %u", &record1.id2 );
printf("\nAddress of a = %u", &record1.a );
printf("\nAddress of b = %u", &record1.b );
printf("\nAddress of percentage = %u",&record1.percentage);
return 0;
}
Output:
size of structure in bytes : 16
Address of id1 = 675376768
Address of id2 = 675376772
Address of a = 675376776
Address of b = 675376777
Address of percentage = 675376780
The pictorial representation of above structure memory allocation is given below. This diagram will help you to understand the memory allocation concept in C very easily.
Further reading: check out here (also the source for the above example) for C – Structure Padding and Structure dynamic memory allocation in C .
|