linux 数组 内存,linux-从大型malloced数组读取而不是仅存储时...

我正在使用下面的代码对监视页面错误进行简单的测试,我不知道的是,下面的简单一行代码如何使页面错误计数加倍.

如果我用

ptr[i+4096] = 'A'

我使用perf工具获得了25,722个页面错误,这是我所期望的,

????但是如果我使用

tmp = ptr[i+4096]

相反,页面错误翻了一番,达到51,322

??我不怎么解释.以下是完整的代码.谢谢!

void do_something() {

int i;

char* ptr;

char tmp;

ptr = malloc(100*1024*1024);

int j = 0;

int k = 0;

for (i = 0; i < 100*1024*1024; i+=4096) {

//ptr[i+4096] = 'A' ;

tmp = ptr[i+4096];

for (j = 0 ; j < 4096; j++)

ptr[i+j] = (char) (i & 0xff); // pagefault

}

free(ptr);

}

int main(int argc, char* argv[]) {

do_something();

return 0;

}

机器信息:

架构:x86_64

CPU操作模式:32位,64位

字节顺序:小尾数

处理器:40

在线CPU列表:0-39

每个核心线程数:2

每个插槽的核心数:10

插座:2

NUMA个节点:2

供应商ID:正版英特尔

CPU系列:6

型号:63

型号名称:Intel(R)Xeon(R)CPU E5-2687W v3 @ 3.10GHz

步进:2

CPU MHz:3096.188

BogoMIPS:6197.81

虚拟化:VT-x

L1d快取:32K

L1i缓存:32K

L2快取:256K

三级缓存:25600K

NUMA node0 CPU:0-9,20-29

NUMA node1 CPU:10-19,30-39

3.10.0-514.32.3.el7.x86_64#1

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值