探索内存大小段存储
2016-04-25 17:53
585 查看
1.
A的ASCII码16进制存储为41,对应B,C,D,E为42,43,44,45;
VS下为小段模式
2.
将高精度存入低精度时,截取掉高位,高位补ff,内存中默认用cc初始化
3.
4.
5.
e不是对齐到d后面,按A本身最大整数倍对齐数。
6.
7.
总结:
结构体中第一个变量地址等于结构体起始地址
第一个变量永远对齐到0偏移(相对于结构体的起始位置),永远对齐(结构体中最大对齐数整数倍)-----结构体大小。
对齐数:结构体中最大的和系统中的较小者。windows:8,Linux:4
A的ASCII码16进制存储为41,对应B,C,D,E为42,43,44,45;
VS下为小段模式
2.
将高精度存入低精度时,截取掉高位,高位补ff,内存中默认用cc初始化
3.
#include<stddef.h> #pragma pack(4) struct A { int a; char b; short c; char d[11]; }; aaaab0cc dddddddd ddd//应补齐最大对齐数的整数倍 int main() { cout << sizeof(A) << endl; cout << offsetof(A,a) << offsetof(A,b) << offsetof(A,c) << offsetof(A,d) << endl; system("pause"); return 0; }运行结果为:20 0,4,6,8
4.
struct B { int a; char c; double d; }; //aaaac000 //dddddddd cout << sizeof(B) << endl; cout << offsetof(B,a) << offsetof(B,c) << offsetof(B,d) << endl;运行结果:16 0,4,8
5.
struct A { int a; char b; short c; char d[11]; }; struct B { int a; char c; double d; A e; }; cout << sizeof(B) << endl; cout << offsetof(B, a) << offsetof(B, c) << offsetof(B, d) << offsetof(B, e) << endl;运行结果:36 0,4,8,16
e不是对齐到d后面,按A本身最大整数倍对齐数。
6.
#include<stddef.h> #pragma pack(4) struct A { int a; char b; short c; char d[11]; }; struct B { int a; double d; char c; A e; }; cout << sizeof(B) << endl; cout << offsetof(B, a) << offsetof(B, c) << offsetof(B, d) << offsetof(B, e) << endl;运行结果:36 0,4,12,16
7.
#include<stddef.h> #pragma pack(8) struct A { int a; char b; short c; char d[11]; }; struct B { int a; double d; char c; A e; }; cout << sizeof(B) << endl; cout << offsetof(B, a) << offsetof(B, c) << offsetof(B, d) << offsetof(B, e) << endl;运行结果:40 0,8,16,20
总结:
结构体中第一个变量地址等于结构体起始地址
第一个变量永远对齐到0偏移(相对于结构体的起始位置),永远对齐(结构体中最大对齐数整数倍)-----结构体大小。
对齐数:结构体中最大的和系统中的较小者。windows:8,Linux:4
相关文章推荐
- Tomcat端口被占用解决方法(不用重启)
- “传奇”图象数据存储方式
- 超大数据量存储常用数据库分表分库算法总结
- SQL Server误区30日谈 第18天 有关FileStream的存储,垃圾回收以及其它
- C++实现图的邻接表存储和广度优先遍历实例分析
- 详解Android文件存储
- C#调用sql2000存储过程方法小结
- PHP 存储文本换行实现方法
- 注册表中存储数据库链接字符串的方法
- Mysql中存储UUID去除横线的方法
- 关于大小端、位域的一些概念详解
- MySQLMerge存储引擎
- 深入PHP变量存储的详解
- MySQL存储毫秒数据的方法
- MySQL存储过程中使用动态行转列
- Android App将数据写入内部存储和外部存储的示例
- 简介Android应用中sharedPreferences类存储数据的用法
- Android App中各种数据保存方式的使用实例总结
- 详解Android四种存储方式
- Android编程中的5种数据存储方式