【发布时间】:2013-01-02 23:00:58
【问题描述】:
我至少对以下问题的大致答案感兴趣:
int n;
...
std::vector<void*> vectorOfPointers;
vectorOfPointers.reserve(n);
上面提到的程序在 O(1) 中运行到哪个数字 n ?
让我们假设一台运行 32 位 Ubuntu 和 3 GB 内存的笔记本电脑,没有运行任何其他程序。是几万,几万,几百万?需要知道哪些信息才能评估这样一个问题?有没有办法在不进行任何实验的情况下找出答案?
我从未研究过任何有关操作系统的知识,但在我的想象中,操作系统只需 2 个步骤即可分配内存。它确定开始块的指针和块结束的指针。情况可能会更复杂,因为系统可能必须整理才能获得足够大的内存。但是如果我们假设系统只运行这一个程序,我们如何估计需要的时间呢?除了内存碎片化,还有其他方面需要考虑吗?
编辑:
对不起,我没有把我的问题说清楚。重要的是要考虑到,在调用 reserve 之前向量是空的,因此不需要复制数据。
【问题讨论】:
标签: c++