在我正在处理的项目中,我包含了来自this库的lz4.c和lz4.h文件。因为我想最小化二进制大小,我避免使用任何std库函数。压缩库需要memset,memcpy和memmove的实现,为了使它工作,我必须链接几个标准库(即msvcrt.lib)。这将二进制大小从不到3千字节增加到34千字节。我是否可以在标准库中包含这些函数,还是需要编写这些函数的实现并修改压缩库以使用它们?谢谢!
答案 0 :(得分:1)
memmove
以外的所有内容都可以在标准C中实现。
void *memcpy(void *dest, const void *src, size_t n)
{
size_t i;
for (i = 0; i < n; ++i)
((unsigned char *) dest)[i] = ((unsigned char *) src)[i];
return dest;
}
void *memset(void *blk, int c, size_t n)
{
size_t i;
for (i = 0; i < n; ++i)
((unsigned char *) blk)[i] = c;
return blk;
}
但是,强烈建议强烈劝阻,因为你不足以击败编译器;没有人。编译器始终知道如何为其定位的平台制作最快的功能。