内存分配

原创 2006年06月11日 22:01:00

在写C/C++程序的时候最容易出错的地方就是指针这一块了,指针本身难度也是比较大,难以理解的.一般人甚至不想去触碰她,但是如果真正理解了,却可以给我们带来很多的便利,让我们能够更自由更灵活的实现我们的想法!

在C++中,内存被分为五个块: 堆,栈,自由存储区,全局/静态变量区和常量存储区.

栈: 是编译器在需要的时候分配,在不需要的时候自动清除的一块区域.通常用来存储局部变量,形式参数.

堆: 一般是由new分配的区域,编译器不会去管这块存储区域,主要是由程序员控制,一个new对应一个delete.如果用new分配了一块内存而没有进行释放的话,只有等到进程结束的时候被系统自动收回.

自由存储区:  由malloc分配的区域,和堆十分相似,不同的地方是它的释放用free.

全局/静态变量区: 用来存储全局变量和静态变量.

常量存储区: 这是一块很特殊的区域,不允许程序员修改里边的量(如果你非要改,那也是可以的,非法手段是有很多的,自己去探索吧)

这些东西相对比较底层,也很基础.很多人天天在写程序,他们不一定知道这些,但他们的程序照样运行好好的,就象是很多枪手,枪法很准,可他们不知道枪的内部构造和原理,哪一天他们一旦知道这些了,那么,这个世界说不定就多了很多枪火制造商.不管怎么说,个人觉得真正的高手需要知道这些,今天说不定用不上,明天呢,谁都不知道.

自己也在一直学习这些东西,内存分配让我感觉总是批着一块面纱,神秘而又诱人,一个正常人难免会有好奇心的:).

 

解析STL中典型的内存分配

1 vector 在C++中使用vector应该是非常频繁的,但是你是否知道vector在计算内存分配是如何么?        在c++中vector是非常类似数组,但是他比数组更加灵活,这就表...
  • wallwind
  • wallwind
  • 2012年03月23日 02:26
  • 3816

嵌入式操作系统内核原理和开发(固定内存分配算法)

【 声明:版权所有,欢迎转载,请勿用于商业用途。  联系信箱:feixiaoxing @163.com】      固定内存方式是最简单的方法,也是最容易想到的方法。所谓的固定内存,就是所有分配的内存...
  • feixiaoxing
  • feixiaoxing
  • 2012年06月24日 22:39
  • 3991

《深入理解Java虚拟机》读书笔记——内存分配与回收策略

概述JVM采用分代的垃圾回收策略:不同对象的生命周期是不一样的。目前JVM分代主要是分三个年代: 新生代:所有新创建的对象都首先在新生代进行内存分配。新生代具体又分为3个区,一个Eden区、一个Fro...
  • zinss26914
  • zinss26914
  • 2015年08月17日 11:21
  • 1376

Linux内存布局、内存分配原理

Linux的虚拟内存管理有几个关键概念 1.每个进程有独立的虚拟地址空间,进程访问的虚拟地址并不是真正的物理地址 2.虚拟地址可通过每个进程的页表与物理地址进行映射,获得真正物理地址 3....
  • b2222505
  • b2222505
  • 2017年05月21日 22:09
  • 2328

内存分配算法

(1)首次适应算法。使用该算法进行内存分配时,从空闲分区链首开始查找,直至找到一个能满足其大小要求的空闲分区为止。然后再按照作业的大小,从该分区中划出一块内存分配给请求者,余下的空闲分区仍留在空闲分区...
  • u014427196
  • u014427196
  • 2016年09月09日 11:14
  • 545

python源码分析----内存分配(2)

上一篇说到了,在python的内存分配中两个非常重要的方法:PyObject_Malloc和PyObject_Free 在具体的来这两个方法之前,先要看看别的一些东西...
  • fjs_cloud
  • fjs_cloud
  • 2015年05月24日 20:36
  • 1002

Windows内存分配(转)

堆和栈的区别 一、预备知识—程序的内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类...
  • wudijunjun
  • wudijunjun
  • 2011年01月15日 06:15
  • 2727

Redis内存分配简单分析

Redis内存管理 1.Redis内存申请内存方式有三种: (1)系统自带的malloc/free方式进行申请/释放。 (2)使用tcmal...
  • innobase
  • innobase
  • 2016年05月03日 09:44
  • 312

浅谈Java内存分配策略

Java 内存分配策略 Java 程序运行时的内存分配策略有三种,分别是静态分配,栈式分配,和堆式分配,对应的,三种存储策略使用的内存空间主要分别是静态存储区(也称方法区)、栈区和堆区。 静态存...
  • shangzhongjia
  • shangzhongjia
  • 2016年09月11日 20:43
  • 651

Linux下的内存分配

在空间中的内存分配如图所示 通过以下程序可以更加清晰的看出地址之间的联系:#include int add(int a, int const e) { int c; int d = 0...
  • adlics_r
  • adlics_r
  • 2016年10月20日 23:12
  • 145
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:内存分配
举报原因:
原因补充:

(最多只允许输入30个字)