大内存拷贝考虑使用指针代替

#include <stdio.h>
#include <sys/time.h>
#include <string.h>

#define MAX_BUFFER_SIZE (1*1024*1024)

typedef struct _test_s_
{
    char x[4];
    char *p;
}test;

int main(int argc, char **argv)
{
    char a[MAX_BUFFER_SIZE] = {0};
    char b[MAX_BUFFER_SIZE] = {0};
    char c[MAX_BUFFER_SIZE] = {0};
    struct timeval start, end;
    int i = 0;
    test d;

    gettimeofday(&start, NULL);
    memset((char *)a, 1, MAX_BUFFER_SIZE);
    gettimeofday(&end, NULL);
    printf("take %dus \n", (int)(((end.tv_sec-start.tv_sec)*1000000+end.tv_usec)-start.tv_usec));

    gettimeofday(&start, NULL);
    memcpy(b, "\x12\x23\x34\x45", 4);
    memcpy(b+4, a, MAX_BUFFER_SIZE-4);
    //write();
    gettimeofday(&end, NULL);
    printf("take %dus \n", (int)(((end.tv_sec-start.tv_sec)*1000000+end.tv_usec)-start.tv_usec));
    for (i = 0; i < 16; i++)
    {
        printf("%02x ", b[i]);
    }
    printf("\n");

    gettimeofday(&start, NULL);
    memcpy((char *)d.x, "\x12\x23\x34\x45", 4);
    //write();
    d.p = a;
    //write();
    gettimeofday(&end, NULL);
    printf("take %dus \n", (int)(((end.tv_sec-start.tv_sec)*1000000+end.tv_usec)-start.tv_usec));
    for (i = 0; i < 16; i++)
    {
        printf("%02x ", d.p[i]);
    }
    printf("\n");

    return 0;
}

这里要实际考虑写速度和拷贝文件速度

posted on 2016-08-15 14:42  埋头数月亮  阅读(286)  评论(0编辑  收藏  举报

导航