perf[c++]: use memmove instead of memcpy to improve performance

This commit is contained in:
godotg
2024-07-27 12:33:28 +08:00
parent 47e41a61df
commit 1c8c859a4c
2 changed files with 18 additions and 8 deletions
+9 -4
View File
@@ -87,12 +87,17 @@ namespace zfoo {
writeInt(length);
setWriteOffset(currentWriteIndex);
} else {
int8_t *targetPtr = (int8_t *) calloc(length, sizeof(int8_t));
memcpy(targetPtr, &buffer[currentWriteIndex - length], length);
// int8_t *targetPtr = (int8_t *) calloc(length, sizeof(int8_t));
// memcpy(targetPtr, &buffer[currentWriteIndex - length], length);
// setWriteOffset(beforeWriteIndex);
// writeInt(length);
// writeBytes(targetPtr, length);
// free(targetPtr);
memmove(&buffer[beforeWriteIndex + lengthCount], &buffer[currentWriteIndex - length], length);
setWriteOffset(beforeWriteIndex);
writeInt(length);
writeBytes(targetPtr, length);
free(targetPtr);
setWriteOffset(beforeWriteIndex + lengthCount + length);
}
}
+9 -4
View File
@@ -87,12 +87,17 @@ namespace zfoo {
writeInt(length);
setWriteOffset(currentWriteIndex);
} else {
int8_t *targetPtr = (int8_t *) calloc(length, sizeof(int8_t));
memcpy(targetPtr, &buffer[currentWriteIndex - length], length);
// int8_t *targetPtr = (int8_t *) calloc(length, sizeof(int8_t));
// memcpy(targetPtr, &buffer[currentWriteIndex - length], length);
// setWriteOffset(beforeWriteIndex);
// writeInt(length);
// writeBytes(targetPtr, length);
// free(targetPtr);
memmove(&buffer[beforeWriteIndex + lengthCount], &buffer[currentWriteIndex - length], length);
setWriteOffset(beforeWriteIndex);
writeInt(length);
writeBytes(targetPtr, length);
free(targetPtr);
setWriteOffset(beforeWriteIndex + lengthCount + length);
}
}