【问题标题】:Does qsort use heap memory?qsort 是否使用堆内存?
【发布时间】:2013-07-21 21:19:42
【问题描述】:

在VS2008中使用qsort()的stdlib实现。

qsort() 的这个实现是否使用堆上的内存?还是只使用基于堆栈的内存?

【问题讨论】:

  • std::sort() 有什么问题?
  • 也不错。问题仍然存在。我不需要快速排序,只需要一个不使用堆内存的排序。
  • 以防万一您不知道,VC++ 附带了运行时库的源代码(大多数浮点例程除外),但您可能需要在安装/重新安装期间选中某些框才能获得它。如果您想了解实现的细节,通常可以很容易地找到答案。

标签: c++ visual-studio memory qsort


【解决方案1】:

快速排序是一种就地排序算法。除了运行时堆栈上用于递归调用的空间外,它不使用任何内存。

【讨论】:

  • 请记住qsort() 不需要使用快速排序算法——尽管我认为大多数人使用它的一些变体。 (例如,glibc 的文档提到:“在这个库中 qsort 的实现可能不是就地排序,因此可能会使用额外的内存来存储数组”)
【解决方案2】:

如您所见,herehere 根本不在堆上分配内存。

【讨论】:

  • 链接到另外两个实现并不能回答这个关于 VC++ 实现的问题。
【解决方案3】:

它使用什么和不使用什么是实现细节。语言规范没有为这个问题提供任何答案。

但可以说,没有理由让一个合理的qsort 实现使用动态内存。在qsort 中正确实施的递归计划永远不需要大于给定平台上最大数组大小的log2 的递归深度。这意味着,例如,在平面内存平台上,递归深度不会超过平台的“位数”(例如,在 32 位平台上它不超过 32)。这反过来意味着qsort 可以轻松实现完全基于堆栈的实现。

【讨论】:

    猜你喜欢
    • 2019-04-26
    • 2012-08-30
    • 2019-12-10
    • 2020-09-01
    • 2017-02-15
    • 2023-04-08
    • 2015-10-06
    • 1970-01-01
    • 2017-01-17
    相关资源
    最近更新 更多