代码段 数据段 bss_java 栈

代码段 数据段 bss_java 栈五个数据段之代码段、数据段、BSS、栈、堆 一、五个数据段 进程(执行的程序)会占用一定数量的内存,它或是用来存放磁盘载入的程序代码,或是存放取自用户输入的数据等等。不过,进程对这些内存的管理方式因内存的用途不一而不尽相同:有些内存是事先静态分配和统一回收的;有些却是按照需要动态分配和回收的。 对于

代码段

五个数据段之代码段、数据段、BSS、栈、堆

一、五个数据段
         进程(执行的程序)会占用一定数量的内存,它或是用来存放磁盘载入的程序代码,或是存放取自用户输入的数据等等。不过,进程对这些内存的管理方式因内存的用途不一而不尽相同:有些内存是事先静态分配和统一回收的;有些却是按照需要动态分配和回收的。

  对于任何一个普通的进程来说,他们都会涉及到5种不同的数据段。

  ① 代码段 –text(code segment/text segment)

  代码段(text)段是程序代码段,通常存放程序执行代码的一块内存区域。这部分区域的大小在程序运行前便已经确认,并且内存区域属于只读区域。在代码段中,存放着一些只读的常数变量,例如字符串常量

  ② 数据段 –data

  数据段属于静态内存分配,所有有初值的全局变量和用static修饰的静态变量,常量数据都在数据段中。

  ③ BSS

  BSS(Block Started by Symbol)通常是指用来存放程序中未初始化的全局变量的一块内存区域。

  ④ Stack

  (Stack)保存函数的局部变量、参数、返回值,但不包括static声明的静态变量。此外,栈是一种(LIFO,Last In First Out)的数据结构,这就意味着最后放到栈上面的数据,将会位于栈的顶端,会被第一个移走。栈的运行效率比堆快的多,但是它存储的信息量远不如堆,并且在函数调用完毕后,系统会清除栈上保存的局部变量、函数的调用信息,就像我们在书中看到的,某一个变量的生存期已到,Life is over”。最后一个我想说的是,栈还有一个重要的特征,就是它的地址空间是向着地址减小的方向增长。下面通过一个简单的C语言程序来具体说明一下:

  #include <stdio.h>
  void test(int _para){
  int i=5,j=6;
     int *p = &_para;
   //首先输出参数地址,以及参数的值
     printf("%p\t%d\n", p, *p);
     p--;
      //输出i地址及值
      printf("%p\t%d\n", p, *p);
      p--;
    //输出j地址及值
    printf("%p\t%d\n", p, *p);
    char a[2]={0};
    int b[2]={0};
//输出数组a的两个元素的地址
    printf("%p\t%p\n", &(a[0]), &(a[1]));
//输出数组b的两个元素的地址
    printf("%p\t%p\n", &(b[0]), &(b[1]));
}
int main(int argc, char * argv[]){
    test(4);
    return 0;
}

下面是程序的输出结果,可能因电脑的不同,结果不唯一

0x7fff5012998c  40x7fff50129988  50x7fff60129984  60x7fff50129976 0x7fff501299770x7fff50129990  0x7fff50129994

  通过上述结果,我们知道,栈上面保存的数据越多,最早入栈的元素的地址就会越低。

⑤ 堆(heap)

  堆(heap)保存函数内部动态分配内存,是另外一种用来保存程序信息的数据结构,更准确的说是保存程序的动态变量。堆是先进先出(First In first Out,FIFO)数据结构。它只允许在堆的一端插入数据,在另一端移走数据。的地址空间“向上增加”,即当堆上保存的数据越多,堆的地址就越高。这一点恰恰与栈相反

  如下表,这5个数据段的功能已经由上文呈现,不足之处欢迎大家指出

名称 内容
代码段 可执行代码、字符串常量
数据段 已初始化全局变量、静态变量、常量数据
BSS段 未初始化全局变量、静态变量
局部变量、函数参数
动态分配内存

 参考:http://blog.csdn.net/love_gaohz/article/details/41310597

今天的文章代码段 数据段 bss_java 栈分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/51817.html

(0)
编程小号编程小号
上一篇 2023-08-31 23:06
下一篇 2023-08-31 23:17

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注