设为首页 加入收藏

TOP

C++内存分配与复制构造函数笔试考察
2015-02-13 18:24:22 来源: 作者: 【 】 浏览:30
Tags:内存 分配 复制 构造 函数 笔试 考察

去参加笔试了,有两道题做错了,都是印象里面有概念,但是没有弄清楚它到底是怎么回事,原理是什么,导致题目打错,现总结一下。


一、C++内存分配笔试考察


问题考察如下,请先不要看答案,看看你能否做对,呵呵:


C++内存分配与复制构造函数笔试考察


怎么样,晕了没?正确答案及解析如下:


C++内存分配与复制构造函数笔试考察


解析:char p[] = “...”是一个数组,这个数组是局部变量。char *p = “...”,是一个指针,这个指针指向一个字符串常量。区别在于:数组的话,字符串是存在这个数组里的,因为这个数组属于局部变量(存在栈区),而当该函数执行完,位于栈区的局部变量就销毁了,就算把数组的地址返回给主函数,主函数也无法访问到原有字符串了,应该输出乱码。但是,如果是指向字符串常量的指针,这个字符串是放在程序的常量区而不是放在局部变量中,那么把这个常量的地址返回给主函数,主函数也是可以访问它的。


下面就针对C++中的内存分配做个总结:


一个C/C++编译的程序占用的内存分为以下几个部分:


1. 栈区(stack)


由编译器自动分配释放,存放函数地址、函数参数值、局部变量的值等。


2. 堆区(heap)


就是那些由new分配的内存块,他们的分配与释放由程序员负责,一般一个new就要对应一个delete。如果程序员没有释放掉,那么在程序结束后,操作系统会自动回收。


3. 全局/静态区(static)


全局变量和静态变量的存储是放在一块的,初始化的全局变量和初始化的静态变量在一块区域,为初始化的全局变量和未初始化的静态变量在相邻的另一块区域。程序结束后由系统释放。


4. 常量存储区(const)


常量字符串就是放在这里的。


5. 程序代码区


存放函数体的二进制代码。


其中,堆栈的主要区别如下:


爽歪歪了吧,下面就来看第二个问题吧。。。


C++内存分配与复制构造函数笔试考察


C语言梳理一下,分布在以下10个章节中:


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇PHP写Web Service服务端 下一篇Spring 4.0 中的 WebSocket 架构

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: