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