就各自的语言标准而言,C仅通过malloc()
家族提供动态内存分配,而在C++中,最常见的分配形式是由::operator new()
执行的。C风格的malloc在C++中也可用,许多"baby's first allocator“示例使用它作为其核心分配函数,但我很好奇当代编译器如何实现实际的生成操作符-new。
它只是一个围绕malloc()
的薄薄的包装器,还是由于典型的C++程序与典型的C程序的内存分配行为有很大的不同,它的实现方式有根本的不同?
编辑:我认为主要的区别通常被描述为:C程序有更少、更大、更长的分配,而C++程序有很多、小、短的分配。如果这是错误的,请随时加入,但听起来似乎可以从考虑到这一点中受益。
对于像GCC这样的编译器来说,只有一个核心分配实现并将其用于所有相关语言是很容易的,所以我想知道在每种语言中尝试优化结果分配性能的细节是否存在差异。
更新:感谢所有精彩的答案!在GCC看来,这个问题完全是由ptmalloc解决的,而且MSVC的核心也使用了malloc
。有人知道MSVC-malloc是如何实现的吗?
https://stackoverflow.com/questions/7443782
复制相似问题