84669 Lernen von Personen
152542 Lernen von Personen
20005 Lernen von Personen
5487 Lernen von Personen
7821 Lernen von Personen
359900 Lernen von Personen
3350 Lernen von Personen
180660 Lernen von Personen
48569 Lernen von Personen
18603 Lernen von Personen
40936 Lernen von Personen
1549 Lernen von Personen
1183 Lernen von Personen
32909 Lernen von Personen
sample code:
int i = 3; int j; void f () { int x = 4; int *p = malloc (sizeof(*p)); }
where are i, j, f, x, and p located?
业精于勤,荒于嬉;行成于思,毁于随。
很显然,i和j做为全局变量,在程序的静态存储区;这块区域在程序启动时即被申请,同时在程序运行全程不被释放。
i
j
x和p作为局部变量,分配在调用栈上。随f()被调用时被分配,返回(退栈)时被释放。
x
p
f()
f作为一个函数,存储在内存的代码段。代码段的东西随程序启动时读入内存,并且在程序运行全程不动。
f
p指向的内存被分配在堆上。“堆”其实本质是系统动态分配给内存的空间——程序把从系统中动态申请下来的一段空间视为“堆”,并提供malloc()等灵活的分配功能。操作系统其实只知道一段内存被程序申请走,而根本不知道这段内存的使用模型是“堆”。
malloc()
f:.text segment,i:.data segment,j:.bss segment,x,p:stack,x和p都是局部变量,存于栈上,但是p指向的内存空间处于heap上。
i,j在静态区,x在栈区,p的内容在堆区
sampe—>sample is->are
你看下下面两个文章,讲得很清楚的
ij在堆中xp在栈里
http://segmentfault.com/a/1190000002575242
http://m.blog.csdn.net/blog/zhoucoolqi/7540612
很显然,
i
和j
做为全局变量,在程序的静态存储区;这块区域在程序启动时即被申请,同时在程序运行全程不被释放。x
和p
作为局部变量,分配在调用栈上。随f()
被调用时被分配,返回(退栈)时被释放。f
作为一个函数,存储在内存的代码段。代码段的东西随程序启动时读入内存,并且在程序运行全程不动。p
指向的内存被分配在堆上。“堆”其实本质是系统动态分配给内存的空间——程序把从系统中动态申请下来的一段空间视为“堆”,并提供malloc()
等灵活的分配功能。操作系统其实只知道一段内存被程序申请走,而根本不知道这段内存的使用模型是“堆”。f:.text segment,
i:.data segment,
j:.bss segment,
x,p:stack,
x和p都是局部变量,存于栈上,但是p指向的内存空间处于heap上。
i,j在静态区,x在栈区,p的内容在堆区
sampe—>sample is->are
你看下下面两个文章,讲得很清楚的
ij在堆中
xp在栈里
http://segmentfault.com/a/1190000002575242
http://m.blog.csdn.net/blog/zhoucoolqi/7540612