栈区
:卡cpu、系统自动分配和释放、
变量都是在栈区的、栈区很小、例如:在32位操作系统下上限是:1M
如:double a[1024*128] 分配 1M 栈内存。
堆区 :卡内存、开发人员手动管理、
malloc calloc realloc 开辟的内存都在堆区
free释放内存、可以疯狂扩张到很大、一般 G 级别。
--------------------------------------------------------------------------------------
code area :程序代码指令、常量字符串、只可读(针对程序本身而言、可通过调试技术修改)。
define flag 10 //在代码区
char *p = "abcdef";//在代码区
printf("%d,%d\n", sizeof(p), sizeof("abcdef"));
printf("\n%p", &p);// 查看指针变量的地址
printf("\n%p", p);// 查看字符串的地址
*p = "abc"// 错误的做法、字符串常量在代码区、不可写 ; 写入位置 0x000F5860 时发生访问冲突。
char str[10] = "aaa";// 在栈区、可读可写
p = str;
printf("\n %p %p", p, str);
*p = 98;
printf("\n %s", p); // 结果:baa
--------------------------------------------------------------------------------------
static area :存放全局变量/常量、静态变量/常量。
static可修饰局部变量、全局变量、表示只初始化分配一次、
直到程序运行结束才释放。
const修饰的局部变量在栈区、修饰的全局变量在静态区。
static 修饰的全局变量的作用域只在当前文件模块儿有效。
--------------------------------------------------------------------------------------
heap : 由开发人员控制、使用 malloc calloc realloc 、free 来操作。
--------------------------------------------------------------------------------------
stack :预先设定大小、自动分配与释放。
函数参数、局部变量、return 都在栈区、定长数组也在栈区 。
--------------------------------------------------------------------------------------
变量都是在栈区的、栈区很小、例如:在32位操作系统下上限是:1M
如:double a[1024*128] 分配 1M 栈内存。
堆区 :卡内存、开发人员手动管理、
malloc calloc realloc 开辟的内存都在堆区
free释放内存、可以疯狂扩张到很大、一般 G 级别。
--------------------------------------------------------------------------------------
code area :程序代码指令、常量字符串、只可读(针对程序本身而言、可通过调试技术修改)。
define flag 10 //在代码区
char *p = "abcdef";//在代码区
printf("%d,%d\n", sizeof(p), sizeof("abcdef"));
printf("\n%p", &p);// 查看指针变量的地址
printf("\n%p", p);// 查看字符串的地址
*p = "abc"// 错误的做法、字符串常量在代码区、不可写 ; 写入位置 0x000F5860 时发生访问冲突。
char str[10] = "aaa";// 在栈区、可读可写
p = str;
printf("\n %p %p", p, str);
*p = 98;
printf("\n %s", p); // 结果:baa
--------------------------------------------------------------------------------------
static area :存放全局变量/常量、静态变量/常量。
static可修饰局部变量、全局变量、表示只初始化分配一次、
直到程序运行结束才释放。
const修饰的局部变量在栈区、修饰的全局变量在静态区。
static 修饰的全局变量的作用域只在当前文件模块儿有效。
--------------------------------------------------------------------------------------
heap : 由开发人员控制、使用 malloc calloc realloc 、free 来操作。
--------------------------------------------------------------------------------------
stack :预先设定大小、自动分配与释放。
函数参数、局部变量、return 都在栈区、定长数组也在栈区 。
--------------------------------------------------------------------------------------