我参与了其中一个挑战,你试图生成尽可能小的二进制文件,所以我在没有 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) 可能重复:
GCC C++"Hello World"程序 - > .exe在Windows上编译时大500kb.如何减小尺寸?
我刚开始阅读一些C++在线教程,第一课是Hello World程序.当我将程序编译为可执行文件时,大小超过400kb,即使它只是一个简单的Hello World控制台程序.应该这么大吗?如果没有,为什么会发生?难道我做错了什么?
这是来源:
#include <iostream>
using namespace std;
int main()
{
cout<<"Hello World";
cin.get();
}
Run Code Online (Sandbox Code Playgroud)
真的很感激任何帮助.谢谢
我有兴趣减少我的应用程序的文件大小.它是一个在Visual Studio 2008中使用MVC++构建的MFC/C++应用程序.UPX可以很好地将最终的exe减少到原始大小的40%,但我想减少它.
MFC必须在此项目中静态链接.
我尝试过这个问题中概述的一些方法:reduce-windows-executable-size.特别是将不同的设置应用于编译器/链接器.
我相信通过查看项目中包含某些标题的"成本",我可以进一步缩小规模.
关于如何解决这个问题的任何提示,也许是一个可以为我分析我的代码的工具?谢谢
c++ ×3
demoscene ×1
filesize ×1
header-files ×1
intrinsics ×1
memset ×1
mfc ×1
size ×1
visual-c++ ×1