随笔分类 -  C/C++重要知识点

上一页 1 2 3
堆和栈的区别
摘要:堆和栈的区别 一般认为在c中分为这几个存储区 1栈 - 有编译器自动分配释放 2堆 - 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收 3全局区(静态区),全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。- 程序结束释放 4另外还有一个专门放常量的地方。 - 程序结束释放 在函数体中定义的变量通常是在栈上,用malloc, calloc, realloc等分配内存的函数分 配得到的就是在堆上。在所有函数体外定义的是全局量,加了static修饰符后不管在哪里都存放在全局区(静态区),在所有函数. 阅读全文
posted @ 2012-12-13 09:39 猿人谷 阅读(706) 评论(0) 推荐(0) 编辑
C++中指针和引用的区别
摘要:指针和引用主要有以下区别:引用必须被初始化,但是不分配存储空间。指针不声明时初始化,在初始化的时候需要分配存储空间。引用初始化后不能被改变,指针可以改变所指的对象。不存在指向空值的引用,但是存在指向空值的指针。注意:引用作为函数参数时,会引发一定的问题,因为让引用作参数,目的就是想改变这个引用所指向地址的内容,而函数调用时传入的是实参,看不出函数的参数是正常变量,还是引用,因此可能引发错误。所以使用时一定要小心谨慎。从概念上讲。指针从本质上讲就是存放变量地址的一个变量,在逻辑上是独立的,它可以被改变,包括其所指向的地址的改变和其指向的地址中所存放的数据的改变。而引用是一个别名,它在逻辑上不是独 阅读全文
posted @ 2012-12-13 09:37 猿人谷 阅读(2063) 评论(0) 推荐(0) 编辑
c++程序的内存格局
摘要:c++程序的内存格局通常分为四个区:全局数据区;代码区;栈区;堆区(即自由存储区)。 全局变量、静态数据、常量存放在全局数据区,所有类成员函数和非成员函数代码存放在代码区,为运行函数而分配的局部变量、函数参数、返回地址等存放在栈区,余下的空间都被称为堆区。new和delete,malloc和free,都从堆中分配和释放内存块,但在具体操作上两者有很大的区别。详细的内存分配情况见:http://www.cnblogs.com/heyonggang/p/3250220.html根据《C++内存管理技术内幕》一书,在C++中,内存分成5个区,他们分别是堆,栈,自由存续区,全局/静态存续区,常量存续区 阅读全文
posted @ 2012-12-11 22:26 猿人谷 阅读(968) 评论(0) 推荐(0) 编辑
malloc和new有什么区别
摘要:malloc和new有以下不同:new、delete是操作符,可以重载,只能在c++中使用。malloc、free是函数,可以覆盖,c、c++中都可以使用。new可以调用对象的构造函数,对应的delete调用相应的析构函数。malloc仅仅负责分配内存,free仅仅回收内存,并不执行构造和析构函数。new、delete返回的是某种数据类型指针,malloc、free返回的是void指针。注意:malloc申请的内存空间要用free释放,而new申请的内存空间要用delete释放,不要混用。因为两者实现的机理不同。有了malloc/free为什么还要new/delete?malloc/free是 阅读全文
posted @ 2012-12-11 22:23 猿人谷 阅读(517) 评论(0) 推荐(0) 编辑
sizeof和strlen的区别
摘要:第一个例子: char *ss="0123456789"; sizeof(ss)=4,ss是指向字符串常量的字符指针。 sizeof(*ss)=1,*ss是第一个字符。第二个例子: char ss[]="0123456789";sizeof(ss)=11, ss是数组,计算到“\0”位置,因此是(10+1)。 sizeof(*ss)=1,*ss是第一个字符。第三个例子: char ss[100]="0123456789";sizeof(ss)=100, ss表示在内存中预分配的大小,100*1。strlen(ss)=10,它的内部是用 阅读全文
posted @ 2012-12-11 22:23 猿人谷 阅读(596) 评论(1) 推荐(0) 编辑
结构体字节对齐
摘要:结构体字节对齐 在用sizeof运算符求算某结构体所占空间时,并不是简单地将结构体中所有元素各自占的空间相加,这里涉及到内存字节对齐的问题。从理论上讲,对于任何 变量的访问都可以从任何地址开始访问,但是事实上不是如此,实际上访问特定类型的变量只能在特定的地址访问,这就需要各个变量在空间上按一定的规则排列, 而不是简单地顺序排列,这就是内存对齐。 计算结构变量的大小必须讨论数据对齐的问题。为了使CPU存取的速度最快(这同CPU取数操作有关),c++在处理数据时经常把结构变量中的成员的大小按照4或8的倍数计算,这就叫数据对齐(data alignment)。这样做可能会浪费一些内存,但在理论上CP 阅读全文
posted @ 2012-12-11 08:57 猿人谷 阅读(2164) 评论(4) 推荐(2) 编辑

上一页 1 2 3