gpt4 book ai didi

c++ - std::vector/编程书籍神话的默认大小?

转载 作者:可可西里 更新时间:2023-11-01 15:35:39 28 4
gpt4 key购买 nike

在一本名为“C++ für C-Programmierer”(C++ for C programmers,duh!)的德国编程书籍(可追溯到 2012 年)中,我作为引用购买了这本书,我在有关 STL 的章节中找到了以下部分(我'我马上为你们翻译):

Most STL implementations are generous in terms of memory management. The allocation of vectors is mostly done in 1kb chunks for instances. The clipppings do not really matter if one allocates a few vectors, but it does if you create ten- to hundredthousands of them.

我找不到任何来源证实这一点。我知道这取决于实现,但我找不到任何可以证实这一点的信息,即使对于一个平台也是如此。 Cplusplus.com只是说:

[...]

Therefore, compared to arrays, vectors consume more memory in exchange for the ability to manage storage and grow dynamically in an efficient way.

到目前为止我尝试了什么?

我写了一个利用 OS X 特定的 C++ 程序 malloc_size()功能,但我从未使用过它,我很确定我做错了。如果我按照以下方式做某事:

std::vector<int>* i = new std::vector<int>;
std::cout << malloc_size(i) << std::endl;

Cout 只告诉我 32,这很可能是一个 int 的大小,因此证明作者部分错误,但我并没有真正相信我自己的努力。

有没有人知道或知道资源?提前致谢。

问候,卡森

最佳答案

您的代码无法衡量您希望它衡量的内容。 vector 结构本身通常很小。它基本上包含一些跟踪分配的内存所需的字段和指向该内存的指针。你想衡量的是不同的。

------        -------------------
| i |------> | A few fields |
------ | (e.g., size and |
| capacity) | -------------------
|-----------------| | Space allocated |
| pointer |-------> | for elements |
------------------- -------------------
^ ^
What your code What you want to
measures measure

您可以为 vector 提供一个自定义分配器来跟踪和报告所请求分配的大小。我计算机上的 GCC 4.8.1 实现没有为默认构造的 vector 分配内存(因为它没有元素),并使用评论中提到的双倍增长实现。

关于c++ - std::vector/编程书籍神话的默认大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23938552/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com