首页 > 代码库 > 【C语言】C语言程序所占内存分类
【C语言】C语言程序所占内存分类
参考"http://blog.sina.com.cn/s/blog_63d4849c01014qg3.html"
C语言内存分为5部分:堆、栈、全局(静态)区、常量区(只读)和代码区。
堆,需要人工申请和释放内存,其他均为系统自动释放。
全局(静态)区、常量区:全局可见!
#include <stdio.h>#include <malloc.h>int a=0;//初始化全局变量,存在“全局(静态)区(data)初始化”中,程序结束后由系统释放char *p1;//未初始化全局变量,存在“全局(静态)区(data)未初始化”中,程序结束后由系统释放int main(){ int i=0;//局部变量,存在“栈”,{}之后系统自动销毁 char s[]="abcde";//局部变量,存在“栈”中 char *p2;//局部变量,存在“栈”中 char *p3="abcde";//p3存在“栈”中;"abcde"存在“常量区”,程序结束后由系统释放 char *p4=s; char s2[]={10,11,12}; static int c=0;//存在“全局(静态)区(data)初始化” //下面分配的均为“堆”区 p1=(char*)malloc(10); p2=(char*)malloc(20); s[0]=‘d‘;//局部变量可以修改 *p4=‘d‘;//可以修改// *p3=‘d‘; 报错,说明字符串常量存在只读数据段中,不能修改 printf("s[%d]=%c\n",i,s[i]); printf("p3[%d]=%c\n",i,*(p3+i)); printf("p4[%d]=%c\n",i,*(p4+i)); getchar(); return 0;}
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。