[C语言] 动态存储区 和 动态分配内存 的区别。万分感谢!

谭浩强这样说
【 用户存储空间可以分为三个部分:
1) 程序区;
2) 静态存储区;
3) 动态存储区;】

我想问 :
①动态存储区 和 静态存储区 主要区别是什么?
②动态存储区和 malloc 分配的又有什么区别?malloc分配的又放在哪个区里面?
③malloc 分配的变量放在的那个区和动态存储区有什么区别?

万分感谢!!

(1)从变量的生存期分,有动态存储和静态存储两种,动态存储即在调用函数时临时分配单元,静态存储则是程序整个运行时间内都存在。动态存储:形式参数(本函数内有效); auto自动变量(本函数内有效);register寄存器变量(本函数有效)。静态存储: 静态局部变量(本函数内有效);静态外部变量(本文件中有效)。参考http://zhidao.baidu.com/question/128146638.html?fr=newQuestion
(2)C语言里malloc函数分配的空间属于动态存储区的范畴。正如上面提到的auto自动变量,通过malloc来分配空间的都是自动变量。在C++里明确分开了栈、和自由存储区。像自由变量里的局部变量(全局变量分配在“全局/静态存储区”)和函数都是存储在栈区。而通过malloc分配的空间在自由存储区。C语言没有分那么细,但是在动态存储区内还是分栈和堆的,也就是,由malloc分配的空间在堆区;非malloc分配的局部变量,函数等在栈区;全局变量与静态变量在静态存储区。
(3)区别在(2)里说的很清楚了,如果还有哪里不是很明白可以看一下参考资料。
最后,祝您成功!追问

函数中的 形参属于 auto变量吗?

参考资料:http://hi.baidu.com/bwandmff/blog/item/b43f1138a423482096ddd8dc.html

温馨提示:内容为网友见解,仅供参考
第1个回答  2011-08-01
代码区
栈(放程序会自动释放的内存)
堆(存放malloc、new申请的内存)追问

函数中的 形参属于 auto变量吗?

追答

所有变量都默认加有auto关键字

[C语言] 动态存储区 和 动态分配内存 的区别。万分感谢!
在C++里明确分开了栈、和自由存储区。像自由变量里的局部变量(全局变量分配在“全局\/静态存储区”)和函数都是存储在栈区。而通过malloc分配的空间在自由存储区。C语言没有分那么细,但是在动态存储区内还是分栈和堆的,也就是,由malloc分配的空间在堆区;非malloc分配的局部变量,函数等在栈区;全...

C语言动态和静态存储类别的区别
静态存储就是在程序开始的时候就分配固定的内存单元,整个程序结束后释放存储单元,而动态存储单元在程序运行初不分配内存单元在用到时才分配,而当用过后则立刻释放该内存空间

c++中的内存分配方式有几种?
内存的三种分配方式:\\x0d\\x0a1. 从静态存储区分配:此时的内存在程序编译的时候已经分配好,并且在程序的整个运行期间都存在。全局变量,static变量等在此存储。\\x0d\\x0a2. 在栈区分配:相关代码执行时创建,执行结束时被自动释放。局部变量在此存储。栈内存分配运算内置于处理器的指令集中,效率...

C语言 malloc()函数 分配内存空间尺寸的问题
分配的空间要能保证容下你想存储的数据,不要和机器逗着玩(分配0空间,或少于自己实际需要的空间),如你上面的操作,表面上你程序运行没有问题,可实际上你占用了别人的地盘,只是当前你很幸运没有使程序出现问题,但不保证一定不出问题!!不再使用的指针,一定要free()来释放空间!malloc 与free要...

程序中动态分配的内存存放在哪个区域
c++语言: 用 new分配,用 delete释放,在 堆区。用malloc分配,用 free释放,在类似堆区的自由存储区。堆不同于栈,它的数据结构并非由系统(无论是机器系统还是操作系统)支持,而是由函数库提供的。直接方式:当时多道程序技术还没出现,存储器的可用空间一般是给定的。那时程序员在编程序时或编译程序...

一道基础C语言题,求解,最好附上这部分的知识点(通俗易懂点)。
每一个程序在执行时都占用一款可用的内存空间,用于存放动态分配的对象,此内存空间称为程序的自由存储区(free store)或堆(heap).C语言程序使用一对标准库函数malloc和free在自由存储区中分配存储空间,而C++语言则使用new和delete表达式实现相同的功能.1.动态数组的定义数组变量通过指定类型、数组名和维数来定义.而动态...

C语言中的动态内存分配的用法举例
1、malloc函数:其作用是在内存的动态存储区中分配一个长度为size的连续空间。其参数是一个无符号整形数,返回值是一个指向所分配的连续存储域的起始地址的指针。2、free函数:由于内存区域总是有限的,不能不限制地分配下去,而且一个程序要尽量节省资源,所以当所分配的内存区域不用时,就要释放它,...

C语言的内存分配和段错误的处理
C语言程序由三部分组成:代码区、静态存储区和动态存储区。代码区包含机器语言表示的可执行二进制代码。静态存储区在编译和链接时分配,用于全局和静态变量的存储。动态存储区在程序执行时动态分配,用于局部变量和函数参数。以测试内存分配和段错误的代码为例,其结果展示了静态存储区中变量的初始值,包括...

c语言中变量所分配的内存空间大小
C语言中变量总体分为全局变量,局部变量以及动态分配内存的变量。它们在内存中占据的存储区是不同的,全局变量一般分配在静态存储区。非静态的局部变量(包括形参)一般分配在内存中的动态存储区,这个存储区是一个称为栈的区域。除此之外C语言还允许建立内存动态分配区域,以存放一些临时的数据,这些变量不...

动态分配内存详细释义
动态内存分配的关键在于使用 malloc 函数。malloc 函数用于在内存的动态存储区中分配连续的存储空间。其原型为:void *malloc (unsigned int size)。函数接收一个无符号整型参数 size,表示要分配的内存大小。malloc 函数返回一个指向所分配内存区域起始地址的指针。需要注意的是,如果内存分配失败(例如,...

相似回答