黑马程序员技术交流社区
标题:
栈区 ,堆区,静态区,常量区,代码区的区别
[打印本页]
作者:
qinyawan
时间:
2015-11-24 12:55
标题:
栈区 ,堆区,静态区,常量区,代码区的区别
//stack(
栈
)
//
当调用
getString
函数的时候
,
会为
string
字符串在栈区分配
7
个字节的内存
,
当调用函数以后
,
系统会自动回收内存
//
所以
:***
不能以一个栈区的空间作为函数的返回值
char
string[] =
"iPhone"
;
//
静态变量
//1,
只初始化一次
(
只会开辟一次内存空间
)
//2,
如果没有赋初值
,
默认为
0(
静态变量独有的
)
//3,
空间一旦被开辟
,
就不会释放
,
直到程序结束
static
int
a =
10
;
//
动态内存分配的目的
:
合理的使用内存
(
内存是有限的
)
//
存储区的划分
// 1,
栈区
:
存储是以栈
(
先进后出
)
的结构存储
,
局部变量
(
在函数内部定义的变量
)
和形式参数
(
函数的参数
)
存放到栈区
,
调用函数的时候
,
为局部变量和形式参数分配内存
,
调出函数后
,
系统收回为这个函数分配的内存
// 2,
堆区
:
是由开发人员手动申请
,
手动释放
,
需要人工管理
// 3,
静态区
(
全局区
):
全局变量
(
定义在函数外部的变量
)
和静态变量
(
有
static
修饰的变量
),
存放在静态区
,
一旦开辟内存空间
,
就不会释放
,
直到程序结束
// 4,
常量区
:
存储
:
整型常量
,
字符常量
,
浮点常量
,
字符串常量
,
常量区的内容不能被修改
// 5,
代码区
:
存放
CPU
指令
// printf("%s", getString());//
无输出
,
调用之前函数已经被系统回收
作者:
cbl16888
时间:
2015-11-24 21:40
这个可以学习下
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2