C语言:栈中内存分配是连续的,堆中内存分配是不连续的,对吗?

Python015

C语言:栈中内存分配是连续的,堆中内存分配是不连续的,对吗?,第1张

1、栈中的内存是操作系统自动分配的,可以理解成为时连续的,对中的内存分配是因为我们malloc空间的时候,申请的空间的大小不一样造成了碎片。使用malloc的时候系统内部有一个空闲内存映射表,系统会自动查找空闲内存中的第一个合适大小的空间分配。

2、每一次分配的内存是连续的,但如果用结构体链表来管理分配的内存就可以将每一次分配的内存虚拟的连接起来,但前提是每一次分配的内存还是连续的,只是每个节点所占的内存单元不是连续的。

1、栈区(stack):由编译器自动分配释放,存放函数的参数值,局部变量等值。局部变量,任务线程函数之类的是放在(使用)栈里面的,栈利用率高一些。其操作方式类似于数据结构中的栈。特别,栈是属于线程的,每一个线程会有一个自己的栈。

2、堆区(heap):一般由程序员分配释放,若程序员不释放,则可能会引起内存泄漏。注意它和数据结构中的堆是两回事,分配方式倒是类似于链表,常见的就是malloc出来的都是属于堆区,就像固定出来的区域,到free的时候才释放,有点类似全局的,静态的。

扩展资料

栈内存是由编译器自动分配与释放的,它有两种分配方式:静态分配和动态分配。

1、静态分配是由编译器自动完成的,如局部变量的分配(即在一个函数中声明一个int类型的变量i时,编译器就会自动开辟一块内存以存放变量i)。

2、动态分配由alloca函数进行分配,但是栈的动态分配与堆是不同的,它的动态分配是由编译器进行释放,无需任何手工实现。

参考资料来源:百度百科—栈

参考资料来源:百度百科—堆