美文网首页
BSS段 data段 text段 堆heap 和 栈stack

BSS段 data段 text段 堆heap 和 栈stack

作者: Zero_0_0 | 来源:发表于2019-04-16 20:51 被阅读0次

1.可执行程序包括BSS段、[数据段]、[代码段](也称文本段)。

BSS(Block Started by Symbol)通常是指用来存放程序中未初始化的[全局变量]和[静态变量]的一块内存区域。特点是:可读写的,在程序执行之前BSS段会自动清0。所以,未初始的全局变量在程序执行之前已经成0了。

数据段包括初始化的数据和未初始化的数据(BSS)两部分 。BSS段存放的是未初始化的全局变量和静态变量。

UNIX下可使用size命令查看可执行文件的段大小信息。如size a.out

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

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

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

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

  • 栈(stack):栈又称堆栈,是用户存放程序临时创建的局部变量,也就是说我们函数括弧“{}”中定义的变量(但不包括static声明的变量,static意味着在数据段中存放变量)。除此以外,在函数被调用时,其参数也会被压入发起调用的进程栈中,并且待到调用结束后,函数的返回值也会被存放回栈中。由于栈的先进先出特点,所以栈特别方便用来保存/恢复调用现场。从这个意义上讲,我们可以把堆栈看成一个寄存、交换临时数据的内存区。

相关文章

  • BSS段 data段 text段 堆heap 和 栈stack

    1.可执行程序包括BSS段、[数据段]、[代码段](也称文本段)。 BSS(Block Started by Sy...

  • iOS内存管理

    iOS程序的内存布局(由低到高) 保留段代码段(_TEXT)数据段(_DATA)堆(heap)栈(stack)内核...

  • OC的五大内存区域

    栈区(stack)堆区(heap)全局区/静态区(BSS段和数据段)常量区代码区(代码段) 1、栈区 栈区:又称堆...

  • text段、data段(堆和栈)和bss段

    .1个由C/C++编译的程序占用的内存分为以下几个部分 1>栈区(stack)——由编译器自动分配释放 ,存放函数...

  • 内存管理

    一、内存布局内核区-》栈(stack)-》堆(heap)-》未初始化数据(.bss)-》已初始化数据(.data)...

  • 栈为什么要由高地址向低地址扩展?

    原因 计算机内存分了代码段(.text段)、初始化的数据段(.data段)、未初始化的数据段(.bss段)、堆空间...

  • ASLR bypass

    ASLR负责堆、栈、LIBC加载基址随机化。 PIE负责代码段(.code)、数据段(.data/.bss)加载基...

  • 在内存剖析对象

    对象在内存中的存储 栈、堆、BSS、数据段、代码段是什么?栈(stack):又称作堆栈,用来存储程序的局部变量(但...

  • 堆与栈的区别

    一个程序一般分为3段:text段,data段,bss段text段(__TEXT):程序代码,编译时确定,只读。da...

  • 程序怎么跑起来的

    linux下的可执行文件有三个段文本段(text)、数据段(data)、bss段 对于堆来讲,频繁的new/de...

网友评论

      本文标题:BSS段 data段 text段 堆heap 和 栈stack

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