程序在内存中存储详情(Text、Data、BSS、Heap、Stack....)
2012-02-20 13:43
489 查看
先看下面的一段程序:
char *string =
"Hello World";
int iSize;
char *fun(void)
{
char *p;
iSize = 8;
p = malloc(iSize);
return p;
}
存放的位置(相同的颜色对应)
Text段:上面标记为红色的部分(还包括整个fun函数,由于下边需要,所以没有标记)都存放在Text段,Text段用来存放代码(二进制文件)和常量,该段的数据通常是只读的
例:
VC6.0下,编译无错,但运行是提示内存不可写,这就是因为"Hello"存放在Text段,它是只读的,你不能去修改它.
Data段: 已经初始化了的全局变量string就存放在该段,Data段用来存放初始化了的变量,即初始化了的全局变量和静态变量
BSS段: 未初始化的全局变量iSize存放在这,BSS段主要存放在未初始化的变量,即未初始化的全局变量和静态变量
Heap段: 程序员手动分配的malloc(iSize)这篇内存存放在该段,也需要用户自行释放
Stack段:函数里的局部变量*p存放在该段,Stack段主要存放局部变量、临时变量、函数相互调用的返回的地址,该段由编译器自行分配和释放
那接下来我们来看看,它们什么被分配了内存,什么时候释放内存:
全局变量和静态变量:程序开始的时候就分配了,程序结束时候释放内存。
局部变量:函数调用的时候为变量分配内存,调用结束释放内存。
堆里的:调用malloc时分配内存,调用free时释放。
char *string =
"Hello World";
int iSize;
char *fun(void)
{
char *p;
iSize = 8;
p = malloc(iSize);
return p;
}
存放的位置(相同的颜色对应)
Text段:上面标记为红色的部分(还包括整个fun函数,由于下边需要,所以没有标记)都存放在Text段,Text段用来存放代码(二进制文件)和常量,该段的数据通常是只读的
例:
char *p = "Hello"; p[0] = 'a';
VC6.0下,编译无错,但运行是提示内存不可写,这就是因为"Hello"存放在Text段,它是只读的,你不能去修改它.
Data段: 已经初始化了的全局变量string就存放在该段,Data段用来存放初始化了的变量,即初始化了的全局变量和静态变量
BSS段: 未初始化的全局变量iSize存放在这,BSS段主要存放在未初始化的变量,即未初始化的全局变量和静态变量
Heap段: 程序员手动分配的malloc(iSize)这篇内存存放在该段,也需要用户自行释放
Stack段:函数里的局部变量*p存放在该段,Stack段主要存放局部变量、临时变量、函数相互调用的返回的地址,该段由编译器自行分配和释放
那接下来我们来看看,它们什么被分配了内存,什么时候释放内存:
全局变量和静态变量:程序开始的时候就分配了,程序结束时候释放内存。
局部变量:函数调用的时候为变量分配内存,调用结束释放内存。
堆里的:调用malloc时分配内存,调用free时释放。
相关文章推荐
- 程序在内存中存储详情(Text、Data、BSS、Heap、Stack....)
- 解释的很好的。堆,栈。程序的内存分布。 bss data rodata text heap stack。
- 程序分text, data (initialized), bss, stack, heap几个段
- 程序分text, data (initialized), bss, stack, heap几个段
- 程序分text, data (initialized), bss, stack, heap几个段
- 程序分text, data (initialized), bss, stack, heap几个段
- 程序分text, data (initialized), bss, stack, heap几个段
- 笔记:程序内存管理 .bss .data .rodata .text stack heap
- 程序各个段text,data,bss,stack,heap
- 关于内存的分配问题.bss.data .text .rodata HEAP STACK
- 汇编中bss,data,text,rodata,heap,stack概念
- .text .data .bss stack heap 分析
- Text、Data、BSS、Heap、Stack
- 程序中各段的信息(bbs、data、text、heap、stack)
- 汇编中bss,data,text,rodata,heap,stack
- text data bss stack heap 段
- 进程的地址空间:TEXT,DATA,BSS,HEAP,STACK
- .text, .data , .bss, .constdata, stack, heap; RO, RW, ZI
- text, data (initialized), bss, stack, heap几个段
- 进程的地址空间:TEXT,DATA,BSS,HEAP,STACK