相关疑难解决方法(0)

C中的结构内存布局

我有一个C#背景.我非常喜欢像C这样的低级语言.

在C#中,struct默认情况下由编译器布局内存.编译器可以隐式地重新排序数据字段或填充字段之间的附加位.因此,我必须指定一些特殊属性来覆盖此行为以获得精确布局.

AFAIK,C struct默认情况下不重新排序或对齐a的内存布局.但是,我听说有一个很难找到的例外.

什么是C的内存布局行为?什么应该重新订购/对齐而不是?

c struct memory-layout

76
推荐指数
3
解决办法
9万
查看次数

为什么结构填充没有正确发生?

#include<stdio.h>

struct A
{
    char        c;
    double      e;
    int         s;
}A;

int main()
{
    printf("%u\n", sizeof(A));
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

它给出了输出16.如果我们考虑结构内部填充和结构填充作为一个整体,它不应该是24

我正在使用GCC 4.8.2Ubuntu 14.04 32位上编译代码.

c padding

6
推荐指数
1
解决办法
92
查看次数

为什么赞成数据结构对齐?

结构的每个成员的类型通常具有默认对齐,即每个结构成员在预定边界上对齐.因此,填充是在以下wiki示例中执行的:

struct MixedData
{
    char Data1;
    short Data2;
    int Data3;
    char Data4;
};



struct MixedData  /* After compilation in 32-bit x86 machine */
{
    char Data1; /* 1 byte */
    /* 1 byte for the following 'short' to be aligned on a 2 byte boundary 
assuming that the address where structure begins is an even number */
    char Padding1[1];
    short Data2; /* 2 bytes */
    int Data3;  /* 4 bytes - largest structure member */
    char Data4; /* 1 byte …
Run Code Online (Sandbox Code Playgroud)

c c++ memory struct

5
推荐指数
2
解决办法
627
查看次数

标签 统计

c ×3

struct ×2

c++ ×1

memory ×1

memory-layout ×1

padding ×1