表现:memset

 安茂友恢复_172 发布于 2023-01-14 15:21
  • php
  • 我有简单的C代码(psuedo代码):

    #define N 100000000
    int *DataSrc = (int *) malloc(N);
    int *DataDest = (int *) malloc(N);
    memset(DataSrc, 0, N);
    for (int i = 0 ; i < 4 ; i++) {
        StartTimer();
        memcpy(DataDest, DataSrc, N);
        StopTimer();
    }
    printf("%d\n", DataDest[RandomInteger]);
    

    我的电脑:英特尔酷睿i7-3930,配备4x4GB DDR3 1600内存,运行RedHat 6.1 64位.

    第一个memcpy()以1.9 GB /秒的速度发生,而接下来的三个以6.2 GB /秒的速度发生.缓冲区大小(N)太大,不能由缓存效果引起.所以,我的第一个问题:为什么第一个memcpy()这么慢?也许malloc()在你使用之前不会完全分配内存?

    如果我删除了memset(),那么第一个memcpy()以大约1.5 GB /秒的速度运行,但接下来的三个以11.8 GB /秒的速度运行.几乎是加速的2倍.我的第二个问题:如果我不调用memset(),为什么memcpy()会快2倍?

    撰写答案
    今天,你开发时遇到什么问题呢?
    立即提问
    热门标签
    PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
    Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有