c、c++在定义变量,数组时的内存布局及内存字节对齐
2010-06-22 17:43
399 查看
本文讨论的是在Intel机子上windows系统下的c内存分配
如图演示会更容易懂些。
1,数组元素在内存中的顺序
也请注意程序顺序与内存顺序的关系
int b=10;
int a[3]={1,2,3};
int c=11;
a的地址跟a[0]的地址一样,但是
指针的加减运算 以所指变量的大小为单位:
int(a+1)-int(a)=4;
int(&a+1)-int(a)=4*3=12;
2,int包含四个字节,那么这四个字节的顺序有时怎样的呢
int b=0x01020304;
char ch='a';
注意:变量b的高位在低字节中,而b的地址所指的就是最低的字节
我们知道有内存字节对齐这回事儿,变量 ch 就是被对齐了
这样 int(&b)-int(&ch)=4;
中间那三个字节是空闲的
但如果这样
int b=0x01020304;
char ch='a';
char ch1='a';
这时ch1紧靠着ch,也就是在“Not”的位置
你可以做这样一个测试;
结果是8;
结果还是 8;
能想到,再加入一个char,或两个char,结果还是 8
如图演示会更容易懂些。
1,数组元素在内存中的顺序
也请注意程序顺序与内存顺序的关系
int b=10;
int a[3]={1,2,3};
int c=11;
a的地址跟a[0]的地址一样,但是
指针的加减运算 以所指变量的大小为单位:
int(a+1)-int(a)=4;
int(&a+1)-int(a)=4*3=12;
2,int包含四个字节,那么这四个字节的顺序有时怎样的呢
int b=0x01020304;
char ch='a';
注意:变量b的高位在低字节中,而b的地址所指的就是最低的字节
我们知道有内存字节对齐这回事儿,变量 ch 就是被对齐了
这样 int(&b)-int(&ch)=4;
中间那三个字节是空闲的
但如果这样
int b=0x01020304;
char ch='a';
char ch1='a';
这时ch1紧靠着ch,也就是在“Not”的位置
你可以做这样一个测试;
struct S{ int i; char c; }; void main() { cout<<sizeof(S)<<endl; }
结果是8;
struct S{ int i; char c; char c1; }; void main() { cout<<sizeof(S)<<endl; }
结果还是 8;
能想到,再加入一个char,或两个char,结果还是 8
相关文章推荐
- c++内存中字节对齐问题详解 [ 转载 ]
- 【C/C++语言基础学习】在主函数的定义的指针数组、二维数组通过三级指针在被调用函数分配内存
- C++定义中short int long类型的变量分别占用了几个字节的存储空间
- c++内存中字节对齐问题详解
- C++程序运行时内存布局之----------局部变量,全局变量,静态变量,函数代码,new出来的变量
- 【C++】内存中字节对齐问题详解
- c++内存中字节对齐问题详解
- 探讨C++ 变量生命周期、栈分配方式、类内存布局、Debug和Release程序的区别(二)
- 探讨C++ 变量生命周期、栈分配方式、类内存布局、Debug和Release程序的区别(一)
- 从一个微型例子看“C/C++的内存分配机制”和“数组变量名与指针变量名”
- C/C++内存布局及对齐
- 关于C++内存中字节对齐问题的详细介绍
- 从一个微型例子看“C/C++的内存分配机制”和“数组变量名与指针变量名”
- C字节对齐与C++类对象内存布局
- C/C++:内存字节对齐详解
- 【内存对齐之主文】C/C++字节对齐详解
- C++程序运行时内存布局之----------局部变量,全局变量,静态变量,函数代码,new出来的变量
- 探讨C++ 变量生命周期、栈分配方式、类内存布局、Debug和Release程序的区别(二)
- C/C++学习之C提高----C程序数组排序、数据类型(大小,别名,封装)、变量、程序的内存四区模型(栈,堆,全局,代码区)
- 定义string变量为str,内存流变量为ms,比特数组为bt