美文网首页
内存分配方式

内存分配方式

作者: yikemi | 来源:发表于2017-07-16 10:37 被阅读31次

内存分配方式有三种:

(1) 从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。
(2) 在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。
(3)从堆上分配,亦称动态内存分配。程序在运行的时候用malloc或new(C/C++)申请任意多少的内存,程序员自己负责在何时用free或delete(C/C++)释放内存。动态内存的生存期由我们决定,使用非常灵活,但问题也最多。
摘自林锐第七章

内存的静态分配和动态分配的区别

内存的静态分配和动态分配的区别主要是两个:
一是时间不同。静态分配发生在程序编译和连接的时候。动态分配则发生在程序调入和执行的时候。
二是空间不同。堆都是动态分配的,没有静态分配的堆。栈有2种分配方式:静态分配和动态分配。静态分配是编译器完成的,比如局部变量的分配。动态分配由函数malloc进行分配。不过栈的动态分配和堆不同,他的动态分配是由编译器进行释放,无需我们手工实现。

对于一个进程的内存空间而言,可以在逻辑上分成3个部份:代码区,静态数据区和动态数据区。动态数据区一般就是“堆栈”。“栈(stack)”和“堆(heap)”是两种不同的动态数据区,栈是一种线性结构,堆是一种链式结构。进程的每个线程都有私有的“栈”,所以每个线程虽然代码一样,但本地变量的数据都是互不干扰。一个堆栈可以通过“基地址”和“栈顶”地址来描述。全局变量和静态变量分配在静态数据区,本地变量分配在动态数据区,即堆栈中。程序通过堆栈的基地址和偏移量来访问本地变量。

一般,用static修饰的变量,全局变量位于静态数据区。函数调用过程中的参数,返回地址,EBP和局部变量都采用栈的方式存放。
摘自boke:http://blog.csdn.net/liuchao1986105/article/details/6724392

Stack的三种含义

阮一峰boke:http://www.ruanyifeng.com/blog/2013/11/stack.html

相关文章

  • 高质量C++编程指南 ----内存管理

    7. 内存管理 7.1 内存分配方式 内存分配方式有三种: (1) 从静态存储区域分配。内存在程序编译的时候就已经...

  • 操作系统之内存管理

    内存管理 包括内存管理和虚拟内存管理 内存管理包括内存管理概念、交换与覆盖、连续分配管理方式和非连续分配管理方式(...

  • JVM对象创建与内存分配机制

    一、分配内存 分配内存的方式分两种: 1.指针碰撞:就是按照内存顺序分配,是规整的,分配内存就是把指针向空闲的区域...

  • 深入理解JavaScrip中内存分配和垃圾回收

    内存分配 内存分配方式有三种:[1]从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行...

  • 内存管理

    1、内存分配方式内存分配方式有三种:代码区/文本区 只读并具有可执行权限 从静态存储区域分配。内存在程序编译的时...

  • JVM内存分配

    探索堆内存到底是怎么分配 简介:堆内存分配方式,分配规则讲解 Java堆内存区域的划分以及作用讲解 对象分配的规则...

  • malloc、calloc、realloc的区别?

    (1)C语言跟内存分配方式<1>从静态存储区域分配. 内存在程序编译的时候就已经分配好,这块内存在程序...

  • Android开发之内存的优化

    一、查看当前手机的在单进程中所分配的内存 二、内存的管理方式 1、Android系统内存分配与回收方式 2、App...

  • 内存分配的方式

    三种内存分配的方式: 从静态存储区分配:在编译的时候分配好,在程序的整个生命周期都存在,比如全局变量, stati...

  • 内存分配方式

    内存分配方式有三种: 从静态存储区域分配。内存在编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如...

网友评论

      本文标题:内存分配方式

      本文链接:https://www.haomeiwen.com/subject/wpsmhxtx.html