栈分配的速度快于堆
就普通的操作而已分配栈空间仅仅是一个指针操作, 在汇编中的操作如下,这样就分配了6个字节的空间
1
|
sub esp, 0x06 |
利用内存池来申请堆空间在性能上才有可能在性能赶上栈。 而且申请堆的空间很可能在cache上。
对内存分配需要根据你的申请空间大小,内存碎片情况等的影响,性能上比栈差一些。
栈如何获得内存?在函数中定义一个大的数组是没有大的内存分配开销的,只有在使用它的时候需要做地址映射。
malloc()到底从哪里得到了内存空间?答案是从堆里面获得空间。也就是说函数返回的指针是指向堆里面的一块内存。操作系统中有一个记录空闲内存地址的链表。当操作系统收到程序的申请时,就会遍历该链表,然后就寻找第一个空间大于所申请空间的堆结点,然后就将该结点从空闲结点链表中删除,并将该结点的空间分配给程序。就是这样!