栈和堆,stack和heap,以及程序的内存分配
2014-08-03 20:58
477 查看
stack,栈,准确来说,应该叫“堆栈”。
heap,堆。
程序运行时占用的内存分为如下5个区:
stack,栈,这玩意儿是系统分配的,大小有限,一般windows上默认给程序分配的是1M,所以你会看到stack overflow这种报错。这货一般保存局部变量和函数参数。
heap,堆,这玩意儿是你自己申请和释放的,你不释放那就只能等程序跑完,系统帮你回收了,搞不好就泄漏了。你用什么new、delete、malloc、free啊什么的,操作的那片内存,就是heap。
static,静态区,一般是来放全局变量和static变量(包括static全局变量和static局部变量)。 初始化后的放在一块,没有初始化的放在旁边一块。
文字常量区,常量字符串就存在这里,程序完了后系统自动释放。
代码区,函数的二进制代码。
不过,看到也有资料说,程序运行时占用的内存分为如下五个区:
代码区、初始化数据区、未初始化数据区、堆区、栈区。
我个人感觉上面两种说法应该说的都差不多。因为我们的stack和heap,栈和堆用好了,程序就问题不大了。
在别处看到一个例子,关于程序内存分配的,感觉很有道理。摘录下来,大家看一下:
不过这货好像malloc后没有free啊,哈哈哈
heap,堆。
程序运行时占用的内存分为如下5个区:
stack,栈,这玩意儿是系统分配的,大小有限,一般windows上默认给程序分配的是1M,所以你会看到stack overflow这种报错。这货一般保存局部变量和函数参数。
heap,堆,这玩意儿是你自己申请和释放的,你不释放那就只能等程序跑完,系统帮你回收了,搞不好就泄漏了。你用什么new、delete、malloc、free啊什么的,操作的那片内存,就是heap。
static,静态区,一般是来放全局变量和static变量(包括static全局变量和static局部变量)。 初始化后的放在一块,没有初始化的放在旁边一块。
文字常量区,常量字符串就存在这里,程序完了后系统自动释放。
代码区,函数的二进制代码。
不过,看到也有资料说,程序运行时占用的内存分为如下五个区:
代码区、初始化数据区、未初始化数据区、堆区、栈区。
我个人感觉上面两种说法应该说的都差不多。因为我们的stack和heap,栈和堆用好了,程序就问题不大了。
在别处看到一个例子,关于程序内存分配的,感觉很有道理。摘录下来,大家看一下:
int a = 0; //全局初始化区 char *p1; //全局未初始化区 main() { int b; //栈 char s[] = "abc";// 栈 char *p2; //栈 char *p3 = "123456"; //123456在常量区,p3在栈上。 static int c =0; //全局(静态)初始化区 p1 = (char *)malloc(10); p2 = (char *)malloc(20); //分配得来得10和20字节的区域就在堆区。 strcpy(p1, "123456"); //123456放在常量区,编 4000 译器可能会将它与p3所指向的"123456"优化成一个地方。 }
不过这货好像malloc后没有free啊,哈哈哈
相关文章推荐
- 程序的内存分配 栈区(stack) 堆区(heap
- 栈(stack)与堆(heap)区别以及Java的string变量赋值的内部工作机制(精典转载贴)
- 栈(stack)与堆(heap)区别以及Java的string变量赋值的内部工作机制(精典转载贴)
- heap、stack、全局区(静态区)、文字常量区、程序代码区的差别
- 程序分text, data (initialized), bss, stack, heap几个段
- 解释的很好的。堆,栈。程序的内存分布。 bss data rodata text heap stack。
- 栈(stack)与堆(heap)区别以及Java的string变量赋值的内部工作机制(精典转载贴)
- 堆和栈理论以及程序内存分配
- 程序的内存分配:栈区(stack)堆区(heap)。。。(转载)
- STL的hash和map本身以及其key、value是存在stack还是heap?
- 笔记:程序内存管理 .bss .data .rodata .text stack heap
- 栈(stack)与堆(heap)区别以及Java的string变量赋值的内部工作机制(精典转载贴)
- 程序在内存中存储详情(Text、Data、BSS、Heap、Stack....)
- 程序分text, data (initialized), bss, stack, heap几个段
- 程序的内存分配:stack、heap、static、文字常量区、程序代码区
- 程序在内存中存储详情(Text、Data、BSS、Heap、Stack....)
- 栈(stack)与堆(heap)区别以及Java的string变量赋值的内部工作机制(精典转载贴)
- 程序分text, data (initialized), bss, stack, heap几个段
- Java中内存中的Heap、Stack与程序运行的关系
- 程序各个段text,data,bss,stack,heap