一、调试--》窗口--》内存
文章图片
定义结构体A
struct A
{
int a;
char b;
char *c;
char d;
};
int main()
{
A * pa = new A();
pa->a = 5;
pa->b = 'a';
pa->c = "hello";
pa->d = 'b';
system("pause");
return 0;
}
【vs2015查看变量在内存中存储】
文章图片
1)将地址pa中地址,复制到地址栏,回车,查看该地址下数据分布,第一行显示。
2)对照A的结构体,05代表一个字节(16进制表示形式),pa->a为int型使用4个字节存储,pa->a = 00000005(从右向左读),pb->b = 00000061(即字符‘a’),后面4个字节代表pa->c这个这真里面的数据,pa->d = 00000062(字符‘b’)。
注意:将换成char b[10]类型后,看看内存分布,变量是相邻存放的,好像并没有内存对齐?
实际:对于数组如char b[10] 其对齐字节为sizeof(char )
实际是进行了内存对齐,a占4个字节,b占1个字节 加一起是5 <8 ,系统会把数组中的前3个字符向前对齐,这样就不需要额外填充,c后面还剩7,而d占1个字节,刚好加一起是b的1字节是8,也是对齐的。
文章图片
推荐阅读
- 个人日记|K8s中Pod生命周期和重启策略
- 学习分享|【C语言函数基础】
- C++|C++浇水装置问题
- 数据结构|C++技巧(用class类实现链表)
- C++|从零开始学C++之基本知识
- 步履拾级杂记|VS2019的各种使用问题及解决方法
- leetcode题解|leetcode#106. 从中序与后序遍历序列构造二叉树
- 动态规划|暴力递归经典问题
- 麦克算法|4指针与队列
- 遇见蓝桥遇见你|小唐开始刷蓝桥(一)2020年第十一届C/C++ B组第二场蓝桥杯省赛真题