大内存拷贝考虑使用指针代替
#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; }
这里要实际考虑写速度和拷贝文件速度