【发布时间】:2012-08-01 10:16:14
【问题描述】:
我可以假设对于任何类型T,类型std::list<T> 将具有相同的恒定大小吗?为了清楚起见,我的意思是“主”类型本身的大小,而不是它分配的内存。
在我看来,假设T 本身的大小应该只影响使用分配器分配的列表节点的大小,这似乎是合乎逻辑的。
但是,有两件事可能会导致sizeof(std::list<T>) 的变化我能想到:
- 一个标准 C++ 库试图通过将一些
T实例放入std::list<T>本身来“优化”std::list类型。这对我来说似乎是个坏主意,它可能违反了标准提出的“恒定时间”要求; - 一种标准 C++,对于某些类型具有
std::list<T>的库特化,并且特化具有不同的大小。
我想不出 (1) 或 (2) 的任何用途,但我可能错了。
我正在考虑实现的是使用固定大小的切片分配器来使用std::list<T> 内部的模板类。
注意:这是关于不同类型的T 的差异,不是的不同分配器。我将明确控制所有实例化,它们都将使用std::allocator。
【问题讨论】:
-
有趣,+1。我很确定,标准不保证相同的大小,但仍然 +1 并且只是评论:)
-
我想到了
vector而不是list,但它可能包含T*,而且并非所有指针的大小都相同...好吧,我不完全确定您将如何创建成员函数的容器,但是 ... -
@BoBTFish - 所有指针大小相同。
-
@KirilKirov:不,那不是真的。
-
@KirilKirov:PDP-10 要求
char*大于int*,因为它需要对字地址和 36 位字中的字节偏移进行编码。这是在以前只支持字寻址的架构中添加字节寻址的结果。