这篇文章将为大家详细讲解有关c#如何探索内存大小段存储,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
1.
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
关于“c#如何探索内存大小段存储”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。