明晰C++内存分配的五种方法的区别

来源:互联网 发布:2017淘宝晚会直播 编辑:程序博客网 时间:2024/06/12 20:35
 在C++中,内存分成5个区,他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。 

  栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清楚的变量的存储区。里面的变量通常是局部变量、函数参数等。 

  堆,就是那些由new分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个new就要对应一个delete。如果程序员没有释放掉,那么在程序结束后,操作系统会自动回收。 

  自由存储区,就是那些由malloc等分配的内存块,他和堆是十分相似的,不过它是用free来结束自己的生命的。 

  全局/静态存储区,全局变量和静态变量被分配到同一块内存中,在以前的C语言中,全局变量又分为初始化的和未初始化的,在C++里面没有这个区分了,他们共同占用同一块内存区。 

  常量存储区,这是一块比较特殊的存储区,他们里面存放的是常量,不允许修改(当然,你要通过非正当手段也可以修改,而且方法很多,在《const的思考》一文中,我给出了6种方法) 

  明确区分堆与栈 

  在bbs上,堆与栈的区分问题,似乎是一个永恒的话题,由此可见,初学者对此往往是混淆不清的,所以我决定拿他第一个开刀。 

  首先,我们举一个例子: 

void f() { int* p=new int[5]; } 

  这条短短的一句话就包含了堆与栈,看到new,我们首先就应该想到,我们分配了一块堆内存,那么指针p呢?他分配的是一块栈内存,所以这句话的意思就是:在栈内存中存放了一个指向一块堆内存的指针p。
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 瓶盖太紧扭不开怎么办 铁盖玻璃瓶打不开怎么办 玻璃瓶塑料盖打不开怎么办 玻璃杯拧不开了怎么办 不锈钢瓶盖打不开怎么办 密封玻璃罐打不开怎么办 玻璃密封盒打不开怎么办 密封瓶打不开怎么办 瓶盖拧太紧打不开怎么办 玻璃瓶盖拧不紧怎么办 电饭煲盖子打不开怎么办 瓶盖太紧开不开怎么办 颜料拧不开怎么办 瓶盖一直转不开怎么办 水粉颜料拧不开怎么办 塑料盖子扭不开怎么办 水瓶盖太紧打不开怎么办 压盖子拧不开怎么办 公章盖子拧不开怎么办 塑料瓶打不开了怎么办 瓶盖转不开怎么办 化妆品瓶盖太紧拧不开怎么办 塑料杯拧不开了怎么办 玻璃瓶盖子拧不开怎么办 塑料水杯拧不开怎么办 玻璃瓶没盖子怎么办 罐装榨菜打不开怎么办 睫毛胶水拧不开怎么办 硅胶盖子打不开怎么办 胶水打不开了怎么办 胶水瓶扭不开怎么办 胶水盖打不开怎么办 睫毛胶打不开怎么办 水杯盖拧不紧怎么办 水杯拧不紧漏水怎么办 蜂蜜瓶子打不开怎么办 胶水瓶口堵住怎么办? 瓶子有气打不开怎么办 罐子瓶盖拧不开怎么办 泡菜瓶子打不开怎么办 玻璃罐盖子打不开怎么办