C++多维vector为什么比多维数组慢

在这里插入图片描述
笔者最近在做LC时,发现用多维vector比用多维数组在运行时间和运行空间上都大了许多,举个栗子

double dp[101][25][25] ={0.0};
vector<vector<vector<double>>> dp_v(101, vector<vector<double>>(25, vector<double>(25, 0.0)));

两者运行时间相差百余ms
通过阅读资料调研发现
慢的原因是数据在内存上存储的方式不同(data locality):

举个栗子,
1)使用二维数组int dp[25][25]的时候,所有数据在内存中是连续存放的。访问内存时,内存访问的局部性较强,Cache命中的概率较大。L1 Cache访问延迟只有几个指令周期,而内存访问延迟则达到几百个指令周期。
2)vector中的数据是连续存放的,但是vector本身只保存指向数据块的指针。vector建立在栈上,保存数据的数据块在堆上。因此二维数组vector<vector<int>>中,指向行的所有指针是连续存放的。每一行的数据是连续存放的,但是行与行之间是不连续存放的。因此跨行访问时局部性降低,Cache命中率下降。所以用时间更多。

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值