c++ - 构造大尺寸的 vector<int>

标签 c++ macos memory-management vector

我在 OS X 10.9.3、2.4 GHz Intel Core i5、8 GB DDR3 上运行以下代码

a.cpp

int main() {
  vector<int> expectation(10e8, -1.0);
  cout << "size()=" << expectation.size() << endl;
  return 0;
}

b.cpp

int main() {
  vector<int> expectation(10e9, -1.0);
  cout << "size()=" << expectation.size() << endl;
  return 0;
}

-

$ time ./a.out 
size()=1000000000

real    0m3.935s
user    0m1.530s
sys 0m2.103s

$ time ./b.out 
size()=10000000000

real    4m49.853s
user    0m16.186s
sys     0m22.966s

在 b.pp 中我们有 10 倍大的 vector 。
我想知道,为什么情况 b 的时间比情况 a 大 100 倍?

UPD
我找到了,我迷路的地方!
10e8 = 10^9 整数 = 4 GB
10e9 = 10^10 整数 = 40 GB

最佳答案

假设每个 int 有 4 个字节,第一个使用 4GB 内存并且适合您的 8GB RAM。第二个使用 40GB,需要不断交换到磁盘。那会慢很多。

请注意,10e9 表示 10x109,或 1010。您可能认为这意味着 109,这将适合 RAM。那将是 1e9

关于c++ - 构造大尺寸的 vector<int>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26179733/

相关文章:

c - 分配 "weak"内存页

c++ - 安装 thrift idl

c++ - 如何使用boost单例

c - 使用未声明的标识符 'O_DIRECT'

swift - Swift 中的 var 和 weak var 有什么区别

ios - 新iPad : Low Memory Warnings Not Appearing?

c++ - 将一个指针分配给另一个指针时出现段错误

c++ - Direct3D 多顶点缓冲区,非交错元素

java - 如何为 JTextField 映射选项(Mac 键盘)的操作?

objective-c - 在 Cocoa 应用程序中使用特定本地化