union和内存对齐的小例子
来源:互联网 发布:java制作骰子 编辑:程序博客网 时间:2024/05/17 06:07
union和内存对齐的小例子
下面这两个例子,包含了两个知识点:
1. union共用内存首地址
2. 结构体内存对齐
例子1:
#include <stdio.h>#include <iostream>using namespace std; /*union 共用体,完全共用一个内存首地址,针对union中变量的操作共同生效*/ /*牵一发而动全身,a、b中的任意一个变了,另一个也变了*/typedef union{ int a; int b;}Demo;union { char mark; //1 long num; //4 int a; //4 float b; //4 double c; //8}student;/*结构体大小是结构体中各变量所占大小的最小公倍数*//*且这个最小公倍数要大于所有变量所占内存大小的总和*/struct{ char mark; //1 (补3) long num; //4 int a; //4 float b; //4 double c; //8} student2 ;int main() { Demo d; d.a = 10; d.b = 12; printf("size:%d\n", sizeof(d)); // int占4个字节 printf("%d\t%d\n",d.a,d.b); // 12 12 “牵一发而动全身” // 内存首地址共用 cout<<sizeof(student)<<endl; //8 //(1+3)+4+4+4+8 = 24 cout<<sizeof(student2)<<endl; //24 return 0;}
运行结果如下:
例子2:
#include <iostream>using namespace std;struct st1 { char a ; //1 补充3 int b ; //4 short c ;//2 补充2 };struct st2 { short c ; //2 char a ; //1 补充1 int b ; //4 };int main() { cout<<"sizeof(st1) is "<<sizeof(st1)<<endl; // 12 cout<<"sizeof(st2) is "<<sizeof(st2)<<endl; // 8 return 0 ;}
参考:
内存对其: http://blog.chinaunix.net/uid-26548237-id-3874378.html
阅读全文
0 0
- union和内存对齐的小例子
- 大端小端区别、Union和Struct的内存分配、对齐方式
- C struct内存对齐 union的大端小端
- 神秘的 sizeof(union) 、sizeof(struct) 和内存对齐技术
- 神秘的 sizeof(union) 、sizeof(struct) 和内存对齐技术
- Union -- 公用体和内存对齐
- union联合体的小例子
- struc,union,class的内存对齐方式
- union 类型 内存对齐
- struct union 内存对齐
- union struct 内存对齐
- union 类型 内存对齐
- struct/union内存对齐
- 大端小端区别、Union和Struct的内存分配
- 大端小端区别、Union和Struct的内存分配
- 大端小端区别、Union和Struct的内存分配
- 关于struct和union存储的内存字节对齐的问题
- 关于 struct 和 union 存储时内存边界对齐的问题(二)
- arp协议
- Vim命令合集
- Flask学习笔记--5
- HDU-2952-Counting Sheep
- MockServer学习
- union和内存对齐的小例子
- 年轻人不要吧自己当小孩
- python之文件读写和异常处理
- 88. Merge Sorted Array
- css中.与#的区别有哪些?
- Shell编程
- c++7.23
- Android--Universal-Image-Loader异步图片加载框架封装思路及实现
- C++单件类,设计模式-单件