摘要: 程序变量分区中栈和堆的区别(1)申请方式stack: 由系统自动分配。 例如,声明在函数中一个局部变量 int b; 系统自动在栈中为b开辟空间。heap: 需要程序员自己申请,并指明大小,在C中malloc函数,C++中是new运算符。如p1 = (char *)malloc(10); p1 = new char[10];如p2 = (char *)malloc(10); p2 = new char[20];但是注意p1、p2本身是在栈中的。(2)申请后系统的响应栈:只要栈的剩余空间大于所申请空间,系统将为程序提供内存,否则将报异常提示栈溢出。堆:首先应该知道操作系统有一个记录空闲内存地址的 阅读全文
posted @ 2011-11-17 21:26 fly1988happy 阅读(434) 评论(0) 推荐(0) 编辑
摘要: 1、C++编译的程序占用的内存分类(1)栈区(stack):程序运行时由编译器自动分配,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。程序结束时由编译器自动释放。(2)堆区(heap) :在内存开辟另一块存储区域。一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。(3)全局静态区(static):编译器编译时即分配内存。全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。程序结束后由系统释放。(4)文字常量区 :常量字符 阅读全文
posted @ 2011-11-17 21:17 fly1988happy 阅读(585) 评论(0) 推荐(0) 编辑
摘要: C++/C程序中,指针和数组在不少地方可以相互替换着用,让人产生一种错觉,以为两者是等价的。但二者有着本质的区别:数组:要么在静态存储区被创建(如全局数组),要么在栈上被创建。数组名对应着(而不是指向)一块内存,其地址与容量在生命期内保持不变,只有数组的内容可以改变。指针:可以随时指向任意类型的内存块,它的特征是“可变”,所以我们常用指针来操作动态内存。指针远比数组灵活,但也更危险。下面以字符串为例比较指针与数组的特性:1.修改内容实例1代码中,字符数组a的容量是6个字符,其内容为hello。a的内容可以改变,如a[0]= ‘X’。指针p指向常量字符串“world”(位于静态存储区,内容为wo 阅读全文
posted @ 2011-11-17 10:21 fly1988happy 阅读(2035) 评论(0) 推荐(0) 编辑