我可以在没有c标准库的情况下实现memset,memcpy和memmove吗?

时间:2016-05-19 22:40:04

标签: c standard-library

在我正在处理的项目中,我包含了来自this库的lz4.c和lz4.h文件。因为我想最小化二进制大小,我避免使用任何std库函数。压缩库需要memset,memcpy和memmove的实现,为了使它工作,我必须链接几个标准库(即msvcrt.lib)。这将二进制大小从不到3千字节增加到34千字节。我是否可以在标准库中包含这些函数,还是需要编写这些函数的实现并修改压缩库以使用它们?谢谢!

1 个答案:

答案 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;
}

但是,强烈建议强烈劝阻,因为你不足以击败编译器;没有人。编译器始终知道如何为其定位的平台制作最快的功能。