union的内存对其

union的内存满足两个原则:

  1. 大于等于最大成员大小;
  2. 非数组最大成员的整数倍。
//示例代码
#include<string.h>
#include<stdio.h>
int main()
{
    union A{
        char a[9];
        short int b;
        int c;
    }u;
    printf("%d", sizeof(u));
    return 0;
}

结果为:12

时间: 2024-10-09 09:03:07

union的内存对其的相关文章

union的内存分布

union w {    int a;  char b; } c; Union的大小为其内部所有变量的最大值,并且按照类型最大值的整数倍进行内存对齐. 上述w,按int,4字节对齐.因此sizeof(w) = 4. union w {    int a;  char b[10]; double c; } c; 上述w,按double,8字节对齐.因此sizeof(w) =  10 + 6(对齐) = 16.

struct和Union的内存分配

eg: struct node{ char c ; int x ; }; 在你定义一个这个的node后, 系统给它分配的内存不是简单的就是sizeof(char)+sizeof(int)= 5 :  而是采用内存对齐的方式 . 首先在计算机中 , 会有一个默认的参数 , 即对齐膜数 , 一般默认为8字节 , 但可以通过在程序中添加如下命令来改变其值 #pragma pack(n) ; 在知道对齐模数后, 就可以开始说对齐规则了 1:在系统给其分配内存时 , 是安照你定义的先后的原则 , 比如说上

C中联合体union共用内存

一种特殊的数据类型,允许您在相同的内存位置存储不同的数据类型.您可以定义一个带有多成员的共用体,但是任何时候只能有一个成员带有值. union变量的大小为其中size最大类型的大小. #include<stdio.h> union U { int a; char b; }; int main() { union U x; printf("%d\n", sizeof(x)); // 4 x.a = 97 + (98 << 0xf); // a的assic码是97

&lt;转&gt; Struct 和 Union区别 以及 对内存对齐方式的说明

转载地址:http://blog.csdn.net/firefly_2002/article/details/7954458 一.Struct 和 Union有下列区别: 1.在存储多个成员信息时,编译器会自动给struct第个成员分配存储空间,struct 可以存储多个成员信息,而Union每个成员会用同一个存储空间,只能存储最后一个成员的信息. 2.都是由多个不同的数据类型成员组成,但在任何同一时刻,Union只存放了一个被先选中的成员,而结构体的所有成员都存在. 3.对于Union的不同成

[小知识]如果使用union判断机器内存是大端序存储还是小端序存储 @ C

比如int i = 1,如果是小端序存储,那么在内存中应该是这样的:0x01 0x00 0x00 0x00:如果是大端序存储的,在内存中应该是:0x00 0x00 0x00 0x01. 那么如何编程来判断机器是大端序存储呢还是小端序存储呢? 上代码: #include <stdio.h> int isBigEndian() { union { int i; char c; }test; test.c = 1; return test.i != 1; } int main() { printf(

内存对齐,大端字节 &nbsp; 序小端字节序验证

空结构体:对于空结构体,就是只有结构体这个模子,但里面却没有元素的结构体. 例: typedef struct student { }std: 这种空结构体的模子占一个字节,sizeof(std)=1. 柔性数组: 结构体中最后一个元素可以是一个大小未知的数组,称作柔性数组成员,规定柔性数组前面至少有一个元素. typedef struct student { int i; char arr[];     //柔性数组成员 }std: sizeof(std)=4; sizeof求取该结构体大小是

c++编程思想(三)--c++中c 续,重点sizeof和内存对齐

之前理论性的太多,下面就是代码及理论结合了 1.sizeof()是一个独立运算符,并不是函数,可以让我们知道任何变量字节数,可以顺带学一下struct,union,内存对齐 内存对齐:为了机器指令快速指向地址值,编译器内部实际上会内存对齐,怎么理解了,以struct为例 先讲一下各个变量类型内存大小 所以struct理论上是:1+2+4+4+4+8+8 = 31,但是实际是 实际大小是32(1+2+1+4)+(4+4)+8+8 然后再把int和short位置调换 实际大小是40   (1+3)+

20160402_[转]联合体(union)的使用方法及其本质

原文:http://blog.csdn.net/huqinwei987/article/details/23597091 1.联合体union的基本特性——和struct的同与不同 union,中文名“联合体.共用体”,在某种程度上类似结构体struct的一种数据结构,共用体(union)和结构体(struct)同样可以包含很多种数据类型和变量. 不过区别也挺明显: 结构体(struct)中所有变量是“共存”的——优点是“有容乃大”,全面:缺点是struct内存空间的分配是粗放的,不管用不用,全

C语言Union

对于Union我用的比较少,最近一段时间大多使用Lua,所以复习一下Union Union是共用体,顾名思义,公用一块内存 一块内存不同的访问方式 // 1.数组的便捷访问 // 一块内存两种等价的访问方式 template <typename T> union Mat4x4 { struct{ T m00, m01, m10, m11; }; T m[2][2]; }; int main(int argc, const char * argv[]) { Mat4x4<float>