C++ 内存分配和指针
C++内存分配
===================================
静态分配: 编译器在处理程序源代码时分配。
在程序执行前分配,因此效率比较高。
但是它要求在程序执行之前就知道所需内存的类型和数量,因此缺少灵活性。
如:
int ival = 1024; //指示编译器分配足够的存储区以存放一个整型值,
//该存储区与名字ival相关。并用数值1024来初始化该存储区。
动态分配: 程序执行时调用运行时刻库函数来分配。
有两个值与一个对象相关:一个是它包含的值,另一个是存放这个值的存储区的地址。
C++支持用指针类型来存放对象的内存地址值。
如: int *pint; //声明一个指向int类型的指针
pint = &ival; //取地址操作符(&)用于对象前时,返回的是对象的地址值
*pint = *pint + 1; //解引用操作符(*)用于指针前时,返回的是指针所指的对象
等价于 ival = ival + 1;
在C++中指针的主要作用是管理和操纵动态分配的内存。
静态与动态内存分配的两个主要区别是:
1. 静态对象是有名字的变量,我们直接对其进行操作。而动态对象是没有名字的变量,我们通过指针间接对其进行操作。
2. 静态对象的分配和释放由编译器自动处理。而动态对象的分配与释放,必须由程序员显式的管理。它是由new和delete两个表达式来完成。
int *pint = new int(1024); //分配int类型的对象,对象初始值为1024
int *pia = new int[4]; //分配特定类型和维数的数组,pia拥有四元素数组的第一个元素的地址。
delete pint; //删除单个对象
delete [] pia; //删除一个数组对象
详细:http://www.cnblogs.com/daban/archive/2012/05/28/2521358.html