为什么我的dll在导出了一些c++类后大小几乎增大了一倍,哪位大侠知道怎么回事,有什么方法可以让它变小

jackybh 2003-10-31 05:30:07
我用的是evc的编译环境,开始一个类都没有导出大小大概为60多k,后来导出了里面的很多类,大小一下变为了110k,可是我的代码一点也没变啊,谁知道是怎么回事,有什么方法可以解决啊?我在这些类里用了很多inline函数,是不是这个原因啊?

...全文
107 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
dysxq 2003-10-31
  • 打赏
  • 举报
回复
因为DLL中导出类与函数生成了导出表,一般来说是以函数名与类名导出的,当然会大许多,如果要减小,可以像MFC那样用序数导出,不过就要自己写一个DEF文件了,而且C++的函数与类导出时名称是像这样?OnPaint@CStaticEx@@QAEXXZ,用于个很烦的规则生成的。MFC的DEF文件在VC的源码目录下的INTEL目录下
jackybh 2003-10-31
  • 打赏
  • 举报
回复
什么叫静态编译和动态编译? 头文件只是申明不会影响最后输出文件的大小的吧,另外我把inline的开关关掉了,即不用inline,而且我的这些inline函数只是提供给外部模块调,自己里面没有用,所以不会展开.
我刚刚想到一个可能性:标准的dll的引出函数是stdcall,即由函数负责清栈,而c/c++默认的调用方式是cdcel,即由调用者负责清栈,所以如果我不导出,由于这些函数是被外部模块调用的,所以程序没有给我清栈的代码,而当我把它导出后,因为导出函数要遵循stdcall的方式,所以程序给我每个函数加了很多清栈的代码吧?
huanyun 2003-10-31
  • 打赏
  • 举报
回复
静态编译也比动态编译要大许多
w_flyer 2003-10-31
  • 打赏
  • 举报
回复
是这样的。因为inline就是直接在你的程序中展开。
同时你可能还包含了其他文件头,那虽然你的代码很少,都会让你的dll变得很大

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧