C语言中关于内存划分的问题

C语言中将内存空间划分为:全局区:存储静态变量和全局变量;堆区:存储由程序员通过Malloc等函数分配的空间;栈区:存储局部变量,函数调用时的状态信息;字符常量区:存放字... C语言中将内存空间划分为:
全局区:存储静态变量和全局变量;
堆区:存储由程序员通过Malloc等函数分配的空间;
栈区:存储局部变量,函数调用时的状态信息;
字符常量区:存放字符常量;
程序代码区:存放二进制的程序代码。

另外,书上介绍C语言将内存划分为:静态存储区、动态存储区。
静态存储区就是前面的全局区,而动态存储区包含了堆栈区。
我的问题是,前一种分类中的字符常量区是否属于动态存储区,以及程序代码区是否属于后一种分类中的静态存储区或动态存储区?
最好高手能够对内存的划分情况(当然是指和c语言相关的)具体说明一下。
展开
 我来答
63...0@qq.com
2010-12-20 · TA获得超过980个赞
知道小有建树答主
回答量:704
采纳率:0%
帮助的人:367万
展开全部
数据结构专门有讲的,下几个课件看看就行了.
1.分配内存空间函数malloc

调用形式: (类型说明符*) malloc (size) 功能:在内存的动态存储区中分配一块长度为"size" 字节的连续区域。函数的返回值为该区域的首地址。 “类型说明符”表示把该区域用于何种数据类型。(类型说明符*)表示把返回值强制转换为该类型指针。“size”是一个无符号数。例如: pc=(char *) malloc (100); 表示分配100个字节的内存空间,并强制转换为字符数组类型, 函数的返回值为指向该字符数组的指针, 把该指针赋予指针变量pc。

2.分配内存空间函数 calloc

calloc 也用于分配内存空间。调用形式: (类型说明符*)calloc(n,size) 功能:在内存动态存储区中分配n块长度为“size”字节的连续区域。函数的返回值为该区域的首地址。(类型说明符*)用于强制类型转换。calloc函数与malloc 函数的区别仅在于一次可以分配n块区域。例如: ps=(struet stu*) calloc(2,sizeof (struct stu)); 其中的sizeof(struct stu)是求stu的结构长度。因此该语句的意思是:按stu的长度分配2块连续区域,强制转换为stu类型,并把其首地址赋予指针变量ps。

3.释放内存空间函数free

调用形式: free(void*ptr); 功能:释放ptr所指向的一块内存空间,ptr 是一个任意类型的指针变量,它指向被释放区域的首地址。被释放区应是由malloc或calloc函数所分配的区域:

main()
{
struct stu
{
int num;
char *name;
char sex;
float score;
} *ps;
ps=(struct stu*)malloc(sizeof(struct stu));
ps->num=102;
ps->name="Zhang ping";
ps->sex='M';
ps->score=62.5;
printf("Number=%d\nName=%s\n",ps->num,ps->name);
printf("Sex=%c\nScore=%f\n",ps->sex,ps->score);
free(ps);
}
aries00219
2010-12-20 · TA获得超过431个赞
知道小有建树答主
回答量:246
采纳率:0%
帮助的人:291万
展开全部
程序代码应该属于静态存储区
因为代码在运行中式不会改变的

静态就是不变的,动态就是可改变的

字符常量属于静态存储区
因为字符串常量很少需要修改,放在静态内存区会提高效率
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
爱青南怒常呀18c89
2010-12-20 · TA获得超过189个赞
知道答主
回答量:103
采纳率:0%
帮助的人:89.8万
展开全部
字符常量区在在全局区活程序代码区(取决于编译器或用法)
程序代码区时静态的,是在程序运行前就分配好的内存空间
在 main 外面定义的变量时静态的,
在函数内的是在栈里。
用 malloc 或 calloc 申请的在堆里,是动态的。

@aries00219: 静态的不一定是只读不可改变的,是指分配固定好的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
西元前的D调
2010-12-21 · 超过22用户采纳过TA的回答
知道答主
回答量:49
采纳率:0%
帮助的人:0
展开全部
程序代码不是专门放在一个内存区域中么?貌似不属于上面的任何一种。上面所说的区域划分是指程序运行过程中占用的内存区域,不包括程序本身。
仅个人理解,如有错误,也没办法。谁叫我也不是很懂。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式