您的位置:首页 > 编程语言 > C语言/C++

比较memcpy与指针操作和索引操作复制时的效率

2017-09-16 00:00 281 查看
摘要: 比较memcpy与指针操作和索引操作的效率

#include <iostream>
#include <time.h> // For clock()
#include <stddef.h> // For size_t
#include <string.h> // For memcpy()

void copy_with_pointers(char const *src, char *dst,
size_t n) {
for (size_t k = 0; k!=n; ++k)
*dst++ = *src++;
}

void copy_with_indices(char const *src, char *dst,
size_t n) {
for (size_t k = 0; k!=n; ++k)
dst[k] = src[k];
}

int main() {
int const n_bytes = 100000;
int const n_calls = 100;
char *src = new char[n_bytes];
char *dst = new char[n_bytes];

// 产生内容
memcpy(dst, src, n_bytes);
clock_t start, end, reftime;

// Test 1 (reference time)
start = clock();
for (int k = 0; k!=n_calls; ++k)
memcpy(dst, src, n_bytes);
end = clock();
reftime = end-start;
cout << "With memccpy: "
<< static_cast<double>(reftime)
<< "memcpy time.\n";

// Test 2 (pointers)
start = clock();
for (int k = 0; k!=n_calls; ++k)
copy_with_pointers(src, dst, n_bytes);
end = clock();
cout << "With pointers: "
<< static_cast<double>(end-start)
<< " times slower than memcpy.\n";

// Test 3 (indices)
start = clock();
for (int k = 0; k!=n_calls; ++k)
copy_with_indices(src, dst, n_bytes);
end = clock();
cout << "With indices: "
<< static_cast<double>(end-start)
<< " times slower than memcpy.\n";

delete[] src;
delete[] dst;
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++ memcpy pointer
相关文章推荐