有这样一个网络传输包。
前端有个固定的包头,包含了后面传输body的长度信息。
在有拷贝的前提下,我们选用什么性能比较高呢?
方案一
复用data_buffer string 将Header 头insert到data_buffer中,将大量的字符串后移定长。
方案二
将Header外化一个string,然后调用append函数,将data_buffer的字符拷贝到head的string中去。
方案三
分配内存,memcpy 过去。
方案四
不分配内存,利用栈空间(受限),memcpy过去。
这四种方案那种的效率最高呢?我比较好奇,做了下实验(如无说明,已然-O2优化),测试代码参考
#include <string> #include <stdio.h> #include "Utility.h" int load_file(const char* filename, char** content, size_t* content_len) { FILE* fp = fopen(filename, "r"); if (!fp) { return -1; } fseek(fp, 0, SEEK_END); size_t len = ftell(fp); rewind(fp); char* buf = (char*)malloc(len + 1); if (!buf) { return -2; } fread(buf, sizeof(char), len, fp); buf[len] = '