内存段是如何划分的

BSS段:BSS段(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域。BSS是英文Block Started by Symbol的简称。BSS段属于静态内存分配。

数据段:数据段(data segment)通常是指用来存放程序中已初始化的全局变量的一块内存区域。数据段属于静态内存分配。

代码段:代码段(code segment/text segment)通常是指用来存放程序执行代码的一块内存区域。这部分区域的大小在程序运行前就已经确定,并且内存区域通常属于只读, 某些架构也允许代码段为可写,即允许修改程序。在代码段中,也有可能包含一些只读的常数变量,例如字符串常量等。代码段是存放了程序代码的数据,假如机器中有数个进程运行相同的一个程序,那么它们就可以使用同一个代码段。

堆(heap):堆是用于存放进程运行中被动态分配的内存段,它的大小并不固定,可动态扩张或缩减。当进程调用malloc等函数分配内存时,新分配的内存就被动态添加到堆上(堆被扩张);当利用free等函数释放内存时,被释放的内存从堆中被剔除(堆被缩减)

栈(stack):栈在进程运行时产生,一个进程有一个进程栈。栈用来存储程序临时存放的局部变量,即函数{}内定义的变量 不包括static 类型的。函数被调用时,他的形参也会被压栈。------------将栈看作一个寄存器交换临时数据的内存区

PS

队列是先进先出:就像一条路,有一个入口和一个出口,先进去的就可以先出去。

而栈就像一个箱子,后放的在上边,所以后进先出。

时间: 2024-10-01 03:31:24

内存段是如何划分的的相关文章

进程—内存段机制

进程-内存段机制 开始阅读之前可以先看看The Curse of Segments 1.x86的硬件段机制 wiki.osdev-Segmentation Modes of Memory Addressing on x86 1.1 段机制的引入 ? 就在8086CPU出现之前,地址总线已经是16位(64KB)的了,在刚开始,段的引入是为了解决"地址总线的宽度大于寄存器的宽度"这个问题.例如8086的寄存器只有16位,但是地址总线却有20位(1MB),为了使程序能利用到1MB的物理内存空

PHP共享内存段实现,使用shmop函数实现内存共享

所谓内存共享:就是多个应用程序公用一个内存段,在A程序中可以获取B程序存储在这个内存段的数据,也就是数据共享. shmop是PHP提供的函数集,在配置PHP的时候使用 -enable-shmop后,就可以使用这个函数集提供的函数, shmop对LINUX更加友好,而对于WINDOWS来说就不怎样了,不支持CGI和CLI模式~有点尴尬. 来说说他提供的一些函数: ftok函数:生成一个数字或叫做键或key.$key = ftok(fileName, mode); 一般情况下,这个fileName可

支持windows linux下将指定内存段转为16进制与ascii码的日志输出类

来源:http://blog.csdn.net/lezhiyong 1. 简介 将指定内存段转为16进制与asci码的输出到日志文件的类. 2. 功能介绍 1) 支持window与linus双系统. 2) 可指定输出目录. 3) 日志能输出的时间精确到毫秒,日志能输出线程号. 4) 提供字符串输出. 5) 提供指定内存转换为16进制输出. 6) 提供指定内存转换为16进制和ascii码同时输出. 7) 可调整16进制输出间距. 3. 原理和算法 1) 模块是基于C++语言编写: 2) 通过条件定

C++内存存储区域的划分

C++内存存储区域划分 面试笔试常考 内存中对数据的存储不是杂乱无章的,而是有相应的划分,根据数据类型分门别类安放到相应的位置. 存储的区域由最高存储地址到最低存储地址依次为: 命令行参数区:命令行参数和环境变量: 栈区(stack):指那些由编译器需要的时候分配,在不需要的时候自动清除的变量的存储区域.里面的变量通常是函数的参数值.局部变量等值,其操作方式类似于数据结构中的栈. 堆区(heap):动态分配内存.一般由程序员分配释放,若程序员不释放掉,在程序结束后,操作系统可能会自动回收.它与数

Linux内存段的分析

    Linux 应用程序的内存分配中,是用 segment(段)进行区别的,使用 size 命令进行查看: size a.out text data bss dec hex filename 1639 264 8 1911 777 a.out     可见,数据是分配 text 段,data 段,bss 段,这里使用size 命令的查看只能是看到这三个段的大小(编译的阶段就可以确定下来)而,堆.栈则是在运行的时候动态去分配空间的. 一.Linux 段的分配 text:代码段,存储代码.常量.

【学习ios之路:C语言】存储区内存划分

一. 内存存储区的划分: 1.栈区:栈区主要存放函数内部定义的变量,数组.函数调用时,开辟空间,函数执行完毕,回收空间,空间的开辟与回收有系统管理. 2.堆区:堆区最大的特点:空间的开辟与释放有开发人员手动管理. 3.全局区静态区:主要存放函数外部定义的全局变量以及静态变量,空间一旦开辟,就不会回收.直到应用程序执行结束. 4.常量区:存储常量.1.整形常量.2.浮点型常量.3,字符串常量.4.字符串常量. 5.代码区:存放程序编译之后生成的cpu指令. 二.malloc,在堆区开辟空间. //

JVM的内存区域划分

说到Java内存区域,可能很多人第一反应是“堆栈”.首先堆栈不是一个概念,而是两个概念,堆和栈是两块不同的内存区域,简单理解的话,堆是用来存放对象而栈是用来执行程序的.其次,堆内存和栈内存的这种划分方式比较粗糙,这种划分方式只能说明大多数程序员最关注的.与对象内存分配关系最密切的内存区域是这两块,Java内存区域的划分实际上远比这复杂.对于Java程序员来说,在虚拟机自动内存管理机制的帮助下,不再需要为每一个new操作去配对delete/free代码,不容易出现内存泄露和内存溢出问题.但是,也正

C语言中内存分布及程序运行中(BSS段、数据段、代码段、堆栈)

BSS段:(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域.BSS是英文Block Started by Symbol的简称.BSS段属于静态内存分配. 数据段 :数据段(data segment)通常是指用来存放程序中 已初始化 的 全局变量 的一块内存区域.数据段属于静态内存分配. 代码段: 代码段(code segment/text segment)通常是指用来存放 程序执行代码 的一块内存区域.这部分区域的大小在程序运行前就已经确定,并且内存区域通常属于 

内存区域的划分

本文主要讲解应用层(c/c++内存划分).linux内核层(X86体系和ARM系统)关于内存上面的划分相关知识点. 一.应用层 1. 在c中分为这几个存储区:堆.栈.全局区(静态区).常量区 (1).栈 - 由编译器自动分配释放. 栈又称堆栈, 是用户存放程序临时创建的局部变量,也就是说我们函数括弧"{}"中定义的变量(但不包括static声明的变量,static意味着在数据段中存放变量).除此以外,在函数被调用时,其参数也会被压入发起调用的进程栈中,并且待到调用结束后,函数的返回值也