相关疑难解决方法(0)

如何使用没有运行时库的VC++内部函数

我参与了其中一个挑战,你试图生成尽可能小的二进制文件,所以我在没有 C或C++运行时库(RTL)的情况下构建我的程序.我没有链接到DLL版本或静态版本.我甚#include至没有头文件.我有这个工作正常.

有些RTL函数memset()可能很有用,所以我尝试添加自己的实现.它在Debug构建中工作正常(即使对于编译器生成隐式调用的那些地方memset()).但是在Release版本中,我得到一个错误,说我无法定义内部函数.您可以看到,在发布版本中,内部函数已启用,并且memset()是内在函数.

我希望memset()在我的发布版本中使用内在函数,因为它可能内联,比我的实现更小,更快.但我似乎是一个陷阱22.如果我没有定义memset(),链接器会抱怨它是未定义的.如果我确定它,编译器会抱怨我无法定义内部函数.

有没有人知道定义,声明,#pragma编译器和链接器标志的正确组合,以获得内部函数而不会拉入RTL开销?

Visual Studio 2008,x86,Windows XP +.

为了使问题更具体:

extern "C" void * __cdecl memset(void *, int, size_t);

#ifdef IMPLEMENT_MEMSET
void * __cdecl memset(void *pTarget, int value, size_t cbTarget) {
    char *p = reinterpret_cast<char *>(pTarget);
    while (cbTarget > 0) {
        *p++ = static_cast<char>(value);
        --cbTarget;
    }
    return pTarget;
}
#endif

struct MyStruct {
    int foo[10];
    int bar;
};

int main() …
Run Code Online (Sandbox Code Playgroud)

c++ demoscene memset intrinsics visual-c++

32
推荐指数
2
解决办法
2万
查看次数

标签 统计

c++ ×1

demoscene ×1

intrinsics ×1

memset ×1

visual-c++ ×1