长安商城网站建设软件开发图片
web/
2025/10/5 23:46:21/
文章来源:
长安商城网站建设,软件开发图片,济南网络推广公司电话,外贸平台网站可执行程序包括BSS段、数据段、代码段。
在类UNIX系统下可使用size命令查看可执行文件的段大小信息。如size a.out#xff1a;
~/Desktop/MyC$ size a.outtext data bss dec hex filename1672 600 8 2280 8e8 a.out1.数据段存放已初始化的全…可执行程序包括BSS段、数据段、代码段。
在类UNIX系统下可使用size命令查看可执行文件的段大小信息。如size a.out
~/Desktop/MyC$ size a.outtext data bss dec hex filename1672 600 8 2280 8e8 a.out
1.数据段存放已初始化的全局变量和静态变量,数据段属于静态内存分配。 2.BSS段(Block Started by Symbol)存放未初始化的全局变量和静态变量。 BSS段的数据是可读写的链接器从可执行文件中得到BSS段的大小然后申请得到这块内存空间这块内存空间紧跟在数据段的后面。由此可知BSS段并不占用可执行文件的大小。在使用BSS段之前BSS段会自动初始化为0。所以未初始的全局变量和静态变量在程序执行之前已经是0了。BSS段属于静态内存分配。
包含数据段和BSS段的整个区段通常称为数据区。
3.代码段用来存放程序的代码内存空间。它的大小在程序运行前就已经确定了并且该区域只能读不能写。在代码段中也有可能包含了一些只读的常数变量例如字符串常量等。 代码段和数据段在编译时已经分配了空间而BSS段则在程序被调入内存后才分配的。因此BSS段未进行初始化的数据的内容并不存放在磁盘上的程序文件中。需要存放在程序文件中的只有代码段和数据段存放已初始化的全局变量和静态变量的内容。 程序编译后生成的目标文件至少含有这三个段这三个段的大致结构图如下所示 可执行程序在运行时会多出两个区域栈区和堆区。 4.栈区由操作系统自动分配和释放 存放函数的参数值局部变量的值等。每当一个函数被调用时该函数的返回类型和一些调用的信息也会被存放到栈中。然后这个被调用的函数再为它的自动变量和临时变量在栈上分配空间。每调用一个函数一个新的栈就会被使用。栈区是从高地址位向低地址位增长的是一块连续的内存区域最大容量是由系统预先定义好的申请的栈空间超过这个界限时会提示溢出用户能从栈中获取的空间较小。
小知识 自动变量:什么是自动变量呢自动变量就是指在函数内部定义使用的变量。只能在函数内部使用它。自动变量是局部变量即它的作用区域是在定义它的函数内部。由于自动变量在定义它的函数的外部是不可见的所以允许我们在这个函数外部或者其他的函数内部定义同名的变量。计算机在执行这个函数的时候创建这个变量并为它分配内存当函数执行完毕返回后自动变量就会被销毁。为自动变量分配内存就是压栈而函数返回时就退栈。 临时变量是指在未在程序开头部分声明的待使用它时才声明类型的变量。常见的如函数中定义的变量循环语句、条件语句中声明定义的变量。这些变量可与主程序中的变量同名在其作用域里主程序中的同名变量一般无法调用。并且这种变量有效存在时间是从变量声明开始到相应程序段循环结构或函数体结束。
5.堆区用于动态分配内存位于BSS和栈中间的地址区域。由程序员亲自用malloc()申请分配和用free()释放。堆是从低地址位向高地址位增长采用链式存储结构。频繁的 malloc/free造成内存空间的不连续产生碎片。当申请堆空间时库函数是按照一定的算法搜索可用的足够大的空间。因此堆的效率比栈要低的多。
最后提示一下内存泄漏是指内存分配出去以后你再也访问不到了。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/87619.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!