C++内存管理: 变量和对象在内存中的分配都是编译器在编译程序时安排好的,但同样带来了不便,如数组必须大开小用,指针必须指向一个已经存在的变量或对象。动态内存分配解决了这个问题。C/C++定义了4个内存区间:代码区,全局数据区,栈区,堆区。定义变量是在编译程序的时候就进行的静态存储分配,所有的动态分配基本都是在堆区进行的。不过是不能说的这么绝对的,与编译器和库都是有关联的。函数的参数未必通过堆栈进行...
分类:
编程语言 时间:
2015-05-04 10:02:30
阅读次数:
188
一个由C/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配...
分类:
其他好文 时间:
2015-04-28 18:03:17
阅读次数:
171
内存四区分配图:---------------------| 堆区 |---------------------| 栈区 |---------------------| 全局区 |---------------------| 代码区 | ---------...
分类:
其他好文 时间:
2015-04-27 23:37:42
阅读次数:
157
静态全局变量在声明它的整个文件都是可见的,而在文件之外是不可见的;静态变量都在全局数据区分配内存,包括后面将要提到的静态局部变量。对于一个完整的程序,在内存中的分布情况如下图:代码区 //low address全局数据区堆区栈区 //high address一般程序把新产生的动态数据存放在堆区,函数...
分类:
其他好文 时间:
2015-04-27 12:36:41
阅读次数:
192
1 内存五大区 栈 堆 静态区 常量区 代码区2 int result = 0; //calloc和malloc功能一样,都是在堆区开辟一块新的空间,唯一不同的是,calloc还把空间重启了一下 //第一个参数是分配多少个房间 //第二个参数是每个房间多少字节 //realloc ...
分类:
其他好文 时间:
2015-04-23 23:09:31
阅读次数:
204
JVM内存板块分为5大块:JAVA堆、永久代、栈空间、本地方法栈、Cheap。JAVA堆:又名Heap区,包括Young、old两大板块永久代:、栈空间:运行时线程私有栈空间本地方法栈:C部分的代码区域Cheap:非java区域的内存使用,有些JNI的调用会用到堆内存Yong空间分为3个板块:1个Eden+2..
分类:
编程语言 时间:
2015-04-20 09:42:42
阅读次数:
176
一、基本概念1、进程:一个程序开始运行时,它就是一个进程。进程包括运行中的程序和程序所使用到的资源。而一个进程是由多个线程组成。2、线程:线程是一个程序中的一个执行流,每个线程都有自己的专有寄存器(栈指针、程序寄存器等)。但是其程序代码区是共享的,即不同的线程可以执行同样的函数。3、多线程:指的是程...
分类:
编程语言 时间:
2015-04-20 01:48:28
阅读次数:
139
Linux可执行文件结构
在 Linux 下,程序是一个普通的可执行文件,以下列出一个二进制可执行文件的基本情况:
可以看出,此可执行文件在存储时(没有调入到内容)分为代码区(text)、数据区(data)和未初始化数据区(bss)3 个部分。各段基本内容说明如下:
代码区:
存放 CPU 执行的机器指令。通常代码区是可共享的(即另外的执行程序可以调用它),使其可共享的目的是对...
分类:
系统相关 时间:
2015-04-19 11:39:13
阅读次数:
185
并发和竞争发生在两类体系中: 对称多处理器(SMP)的多个CPU 内核可抢占的单CPU系统 访问共享资源的代码区域称为临界区(critical sections),临界区需要以某种互斥机制加以保护。在驱动程序中,当多个线程同时访问相同的资源(critical sections)时(驱动程序中的全局....
分类:
系统相关 时间:
2015-04-17 22:04:47
阅读次数:
230
一、C、C++程序编译时内存分为5大存储区:堆区、栈区、静态区(全局区)、文字常量区(储存字符串常量)、程序代码区(存放二进制程序)(1)静态存储区域: 静态存储区域的内存在程序编译时就已经分配好,这块内存在程序的整个运行期间都存在。速度快、不容易出错,因为有系统会善后。例如全局变量,static....
分类:
其他好文 时间:
2015-04-16 23:13:46
阅读次数:
107