内存地址分配 (转载)
来源:互联网 发布:野牛气垫登陆艇知乎 编辑:程序博客网 时间:2024/05/18 00:06
1 内存地址是从高地址到低地址进行分配的:
int j=1;
cout<<&i<<endl<<&j<<endl;//输出:0012FF60(高地址处) 0012FF54(低地址处)
2 函数参数列表的存放方式是,先对最右边的形参分配地址,后对最左边的形参分配地址。
3 Little-endian模式的CPU对操作数的存放方式是从低字节到高字节的
0x1234的存放方式入下:
0X4000 0x34
0X4001 0x12
Big-endian模式的CPU对操作数的存放方式是从高字节到低字节的
0x1234的存放方式入下:
0x4000 0x12
0x4001 0x34
联合体union的存放顺序是所有成员都从低地址开始存放。
4 一个变量的地址是由它所占内存空间中的最低位地址表示的。
0X4000 0x34
0X4001 0x12
0x1234 的地址位0x4000
5 堆栈的分配方式是从高内存地址向低内存地址分配的。
6 char *p=(char*)malloc(1);//为指针p分配一块内存
free(p);//error,因为p所指向的内存已经释放掉,再次释放原来的内存区域将会引起错误操作
p=0;//将0赋给指针p
free(p);
free(p);//ok,对一个空指针,可以多次释放
char *p=(char*)malloc(0);//p!=NULL,多次释放p也会引起错误
7 calloc和realloc
void *calloc(size_t num_elements,size_t element_size);
calloc也用于分配内存,malloc与calloc的主要区别是
1 后者在返回指向内存的指针之前把它初始化为0
2 calloc的参数包括所需元素的数量和每个元素的字节数,根据这些值,能够计算出总共需要分配的内存
void realloc(void *ptr,size_t new_size);
realloc用于修改一个原先已经分配内存块的大小,使用这个函数,你可以使一块内存扩大或缩小。如果它用于扩大一个内存块,那么这块内存原来的内容依旧保留,新增加的内存添加到原来内存块的后面,新内存并未以任何方式初始化。如果它用于缩小一块内存,该内存块尾部的部分内存被拿掉,剩余部分内存的原先内存依旧保留。
如果原先的内存块无法改变大小,realloc将分配另一块正确大小的内存,并把原来内存的内容复制到新的块上,因此,在使用realloc之后,你将不能再使用指向旧内存的指针,而是应该改用realloc返回的新指针
如果realloc函数的第一个参数是NULL,那么它的行为和malloc是一样的。
8 在使用动态内存分配的过程中,常常会遇到许多错误:
1、对NULL指针进行解引用
2、对分配的内存进行操作时越过边界
3、释放并非动态分配皮的内存
4、试图释放一块动态分配的内存的一部分
5、一块动态内存被释放后继续使用
- 内存地址分配 (转载)
- (转载)C++内存地址分配
- 动态内存分配 (转载)
- C 内存分配(转载)
- C 内存分配(转载)
- 内存地址,内存分配
- 内存地址分配
- 内存地址分配
- 内存 地址 分配
- 分配偶数地址内存
- 内存 地址 分配
- 内存地址分配规则
- 内存 地址 分配
- appropriately分配内存地址
- 控制C++的内存分配(转载)
- c++的内存分配(转载)
- C++内存地址分配简介
- 内存分配地址的对齐
- js 中如何操作css中class的值,和它在IE 和 F F中的区别
- How far away ?
- Membership、MembershipUser和Roles类
- J2ee Spider使用
- 如何退出应用程序
- 内存地址分配 (转载)
- 机器人学中对齐次坐标系的理解
- JVM 内存结构的一张小图
- [双语阅读]法国防流感新招:用手语代替亲吻
- 可以在Word中插入LaTeX公式的软件——Aurora
- 数据集类型为XML文件的报表制作方法
- [双语阅读]悉尼海港大桥六千人共进早餐
- 802.1D第一版出炉
- Windows XP下IIS的安装和设置