【发布时间】:2017-08-30 11:17:45
【问题描述】:
stl::deque 实现为数组数组; this questions 解释了它在大多数情况下是如何实现的;我的问题是:是否可以设置内部数组(或块)的大小?这似乎是一个无法操纵的实现细节。是否有允许设置内部数组大小的实现?
感谢 Pinky 的回答:在 libstdc++ (gcc stl) 我们有
#ifndef _GLIBCXX_DEQUE_BUF_SIZE
#define _GLIBCXX_DEQUE_BUF_SIZE 512
#endif
inline size_t
__deque_buf_size(size_t __size)
{ return (__size < _GLIBCXX_DEQUE_BUF_SIZE
? size_t(_GLIBCXX_DEQUE_BUF_SIZE / __size) : size_t(1)); }
因此,在包含双端队列标头(用于 stdc++)之前,通过定义 _GLIBCXX_DEQUE_BUF_SIZE(#define _GLIBCXX_DEQUE_BUF_SIZE 4096 - 如果您想要此大小的内部节点)来设置内部节点的大小
__deque_buf_size 甚至有一些 doxygen 文档,因此该解决方案被记录在案(即使它没有被标准涵盖)。
/**
* @brief This function controls the size of memory nodes.
* @param __size The size of an element.
* @return The number (not byte size) of elements per node.
*
* This function started off as a compiler kludge from SGI, but
* seems to be a useful wrapper around a repeated constant
* expression. The @b 512 is tunable (and no other code needs to
* change), but no investigation has been done since inheriting the
* SGI code. Touch _GLIBCXX_DEQUE_BUF_SIZE only if you know what
* you are doing, however: changing it breaks the binary
* compatibility!!
*/
【问题讨论】:
-
我觉得可以,我看过SGI STL的源码,缓冲区大小可以通过
__deque_buf_size()来确定。 -
标准没有提到“内部数组”,所以这将是非常特定于实现的,并且可能会引发一些兼容性问题,但最终没有什么是不可能的
-
您介意将问题中的“答案”部分移至实际答案吗?这是encouraged by SE rule。