如何结构成员在内存中分配? [英] How are struct members allocated in memory?

查看:122
本文介绍了如何结构成员在内存中分配?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在尝试创造未来的C程序的内存管理器,我遇到了这个问题:

While attempting to create a memory manager for future C programs, I've come across this question:

例如,请考虑下面的结构。

For instance, consider the following struct.

typedef struct {
    int field1;
    int field2;
    char field3;
} SomeType;

当分配的,将字段的内存地址是在订单字段1,场2,FIELD3?或者,这是不能保证?

When allocated, will the memory addresses of the fields be in the order field1, field2, field3? Or is this not guaranteed?

推荐答案

简短的回答:他们被分配了订单,因为他们在结构中声明

Short answer: they are allocated with the order as they declared in the struct.

示例

#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;
}

输出

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

上述结构的存储器分配的图案重新presentation如下。此图将帮助你很容易理解C中的内存分配的概念。

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.

进一步阅读:退房这里(也是源上面的例子中)为ç - 结构填充的C语言结构的动态内存分配

Further reading: check out here (also the source for the above example) for C – Structure Padding and Structure dynamic memory allocation in C.

这篇关于如何结构成员在内存中分配?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆