高质量C++第七章内存管理学习笔记
2013-01-19 20:35
381 查看
第七章 内存管理
内存分配方式三种:
1.从静态存储区分配,内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。如:全局变量,static变量。
2.在栈上创建,执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运 算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。
3.从堆上分配,也叫动态内存分配。
指针与数组的对比:
数组要么在静态存储区被创建,要么在栈上被创建。数组名对应着(而不是指向)一块内存,其地址与容量在生命期保持不变,只有数组的内容可以改变。
指针可以随时的指向任意类型的内存块,他的特征是“可变”,所以我们常用指针来操作动态内存。
计算内存容量:
char a[] = "hello world"; //sizeof(a)为12(别忘了‘\0’)
char *p = a; //sizeof(p)为4,因为sizeof(p)得到的是一个指针变量的字节数,相当于sizeof(char*),而不是p所指的内存容量。
当数组作为函数的参数进行传递时,该数组自动退化为同类型的指针。
void Func(char a[100])
{
cout<<sizeof(a)<<endl; //4字节而不是100字节
}
指针参数是如何传递内存的?
如果函数的参数是一个指针,不要指望该指针去申请动态内存。非要用指针参数去申请内存,那么应该改用指向指针的指针。还可以用函数返回值来传递动内存,但是注意不要用return语句返回指向"栈内存"的指针。
编译器总是要为函数的每个参数制作临时副本,指针参数p的副本是_p,编译器使_p=p,如果函数体内的程序修改了_p的内容,就导致参数p的内容作出相应的修改,这就是指针可以用作输出参数的原因。
通常有三种方式处理“内存耗尽”问题:
1.判断指针是否为NULL,如果是则马上用return语句终止函数
2.判断指针是否为NULL,如果是则马上用exit(1)终止整个程序的运行
3.为new和malloc设置异常处理函数
对于32位以上的应用程序而言,无论怎样使用malloc与new,几乎不可能导致“内存耗尽”。因为32位操作系统支持“虚存”,内存用完了,自动用硬盘空间代替。
本文出自 “破虏的冬天” 博客,请务必保留此出处http://chenpolu.blog.51cto.com/4292751/1122408
内存分配方式三种:
1.从静态存储区分配,内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。如:全局变量,static变量。
2.在栈上创建,执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运 算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。
3.从堆上分配,也叫动态内存分配。
指针与数组的对比:
数组要么在静态存储区被创建,要么在栈上被创建。数组名对应着(而不是指向)一块内存,其地址与容量在生命期保持不变,只有数组的内容可以改变。
指针可以随时的指向任意类型的内存块,他的特征是“可变”,所以我们常用指针来操作动态内存。
计算内存容量:
char a[] = "hello world"; //sizeof(a)为12(别忘了‘\0’)
char *p = a; //sizeof(p)为4,因为sizeof(p)得到的是一个指针变量的字节数,相当于sizeof(char*),而不是p所指的内存容量。
当数组作为函数的参数进行传递时,该数组自动退化为同类型的指针。
void Func(char a[100])
{
cout<<sizeof(a)<<endl; //4字节而不是100字节
}
指针参数是如何传递内存的?
如果函数的参数是一个指针,不要指望该指针去申请动态内存。非要用指针参数去申请内存,那么应该改用指向指针的指针。还可以用函数返回值来传递动内存,但是注意不要用return语句返回指向"栈内存"的指针。
编译器总是要为函数的每个参数制作临时副本,指针参数p的副本是_p,编译器使_p=p,如果函数体内的程序修改了_p的内容,就导致参数p的内容作出相应的修改,这就是指针可以用作输出参数的原因。
通常有三种方式处理“内存耗尽”问题:
1.判断指针是否为NULL,如果是则马上用return语句终止函数
2.判断指针是否为NULL,如果是则马上用exit(1)终止整个程序的运行
3.为new和malloc设置异常处理函数
对于32位以上的应用程序而言,无论怎样使用malloc与new,几乎不可能导致“内存耗尽”。因为32位操作系统支持“虚存”,内存用完了,自动用硬盘空间代替。
本文出自 “破虏的冬天” 博客,请务必保留此出处http://chenpolu.blog.51cto.com/4292751/1122408
相关文章推荐
- 从C到C++再到Obj-C内存管理学习笔记(三)
- C++学习笔记之---内存管理
- 2012/1/19 《C++ Primer Plus》第七章:函数——C++编程模块 学习笔记
- 高质量C/C++编程指南 阅读笔记(二)内存管理
- C++动态内存创建与内存管理学习笔记[1]
- 转:C++动态内存创建与内存管理学习笔记[2]
- C++内存管理学习笔记(2)
- C++ Primer Plus 第六版 学习笔记 第七章 编程练习答案
- 高质量C++程序指南 学习笔记
- 编程中国之高质量C++或C编程指南学习笔记
- C++学习笔记(2)--高质量C++C编程指南一
- C++动态内存创建与内存管理学习笔记[2]
- 转:C++动态内存创建与内存管理学习笔记[1]
- C++动态内存创建与内存管理学习笔记[3]
- 转: C++动态内存创建与内存管理学习笔记[3]
- C++动态内存创建与内存管理学习笔记[4]
- C++内存管理学习笔记(7)
- C++内存管理学习笔记(5)
- C++学习笔记--内存管理
- c++学习笔记-------《c++自学通》第七章 深入了解类