C中静态内存分配与动态内存分配的成本

C中静态内存分配与动态内存分配的成本,第1张

C中静态内存分配与动态内存分配的成本

静态分配将更快。静态分配可以在全局范围和堆栈上进行。

在全局范围内,静态分配的内存内置在二进制映像中。那就是所需内存的总大小,并且正在运行的二进制文件中该内存的位置在编译时进行计算。然后,在程序加载时, *** 作系统加载器将为所有全局静态数组分配足够的内存。我很确定,所有分配都会在固定时间内发生。(例如,更多的分配不会花费更多的时间)

在本地范围内,静态分配在堆栈上分配。这涉及简单地在堆栈上保留固定数量的字节,并且每次分配的时间都是固定的。堆栈空间非常有限。

动态内存必须从堆中分配,即使在最好的情况下,大多数分配所花费的时间也要比每个分配的线性扩展更多,例如n log n time或其他。

实际上,动态分配也将比静态分配慢许多倍。

@update:正如以下注释中所指出的:栈分配在技术上不是静态分配(但它们是OP的问题中使用的语法形式的分配)。

另外,当谈到“分配时间”时,我正在考虑管理内存的总时间(alloc和free)。

在某些动态分配器中,分配时间比释放时间快。

也确实有些快速分配器以内存效率换取分配速度。在这些情况下,静态仍然“更好”,因为在分配精确大小的块时,静态和堆栈分配分别没有时间和恒定时间。

动态分配器可以快速权衡显着的内存效率(例如,伙伴分配器向上舍入为两个大小的块的下一个幂,例如33k alloc将使用64k)



欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/4933247.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-13
下一篇 2022-11-12

发表评论

登录后才能评论

评论列表(0条)

保存