17Enjoy8

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

2011年5月26日

摘要: 1、从静态存储区域分配 内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static 变量。2、在栈上创建 在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集。3、从堆上分配 亦称动态内存分配。程序在运行的时候用malloc 或new 申请任意大小的内存,程序员自己负责在何时用free 或delete 释放内存。动态内存的生存期由程序员决定,使用非常灵活,但问题也最多,经常一不留神就发生内存泄露了。 阅读全文
posted @ 2011-05-26 23:52 17Look8 阅读(365) 评论(0) 推荐(1)

摘要: 1、const定义常量,修饰函数参数和函数返回值。被const修饰后受到强制保护,防止意外地被修改。2、const常量有数据类型,而宏常量没有数据类型。3、编译器可以对const常量进行类型安全检查。而对宏常量只进行字符替换,没有类型安全检查,并且在字符替换可能会产生意料不到的错误。View Code 1 #define DOUBLE(x) x+x 2 int value = 5*DOUBLE(5);//value = ?3 4 /*正确的写法*/5 #define DOUBLE(x) ((x)+(x)) 阅读全文
posted @ 2011-05-26 23:47 17Look8 阅读(657) 评论(0) 推荐(1)

摘要: 1、new/delete 是C++运算符,而malloc/free是C++/C语言的标准库函数。2、他们都是在堆上进行内存的动态分配与释放的,用malloc函数需要指定内存分配的字节数并且不能初始化对象,new 会自动调用对象的构造(constructor)函数。delete 会调用对象的析构(destructor)函数,而free 不会调用对象的destructor,只释放内存。3、delete只会调用一次析构函数,而delete[]会调用每一个成员的析构函数。4、用new分配的内存用delete删除,用new[]分配的内存用delete[]删除。可以简单的说delete删除一个指针,而de 阅读全文
posted @ 2011-05-26 23:05 17Look8 阅读(433) 评论(0) 推荐(0)

摘要: 1、结构和联合都是有多个不同数据类型的成员组成,但是在任何同一时刻,联合中只存放了一个被选中的成员(所有成员共用一块地址空间), 而结构的所有成员都存在(不同成员的存放地址不同)。2、对联合的不同成员赋值,将会对其他成员重写,而结构不存在。View Code 1 union{ 2 int i; 3 struct 4 { 5 char first; 6 char second; 7 }half; 8 }number; 9 number.i=0x4241; /*联合成员赋值*/ 10 printf("%c%cn", number.half.first, mumber.half. 阅读全文
posted @ 2011-05-26 22:42 17Look8 阅读(538) 评论(0) 推荐(0)

摘要: 1、引用是变量的别名,对引用的操作与对变量直接操作的效果一样。2、申明引用时,必须初始化,一旦申明后,就不能再作为其他变量的引用了。3、引用不是变量,也不是一种新的数据类型,只是变量的别名。4、引用不占内存空间。5、不能对数组申明引用。6、传递引用给函数与传递指针的效果一样,被调函数的形参就成为原来主调函数的实参,因此对形参的操作就是对其实参的操作。7、引用作为形参,在内存中不产生实参的副本,因此,当参数传递的数据较大时,用引用比用一般变量传递参数的效率和所占空间都好。8、如果既要利用引用提高程序的效率,又要保护传递给函数的数据不在函数中被改变,就应使用常引用。常引用声明方式:const 类型 阅读全文
posted @ 2011-05-26 22:37 17Look8 阅读(219) 评论(0) 推荐(1)