Unit中未被用到的函数在连接时是否会被连到执行文件中(50分)

  • 主题发起人 主题发起人 陈冲伟
  • 开始时间 开始时间

陈冲伟

Unregistered / Unconfirmed
GUEST, unregistred user!
请问在Unit中未被用到的函数在连接时是否会被连到执行文件中?
如果是, 是否可以通过删除这些函数来减小执行文件的大小?
 
不会,比如你用的DELPHI的UNIT,在生成可执行文件时,只会将你用到的函数连到
可执行文件中去,否则那你的应用程序就太大了:-)
不过也有特殊情况,比如你做了一个类,其中定义了很多函数,当你的函数定义为
private,却没有在类内引用,那DELPHI编译器在优化时将删除该函数--因为外部无法调用它;而当你的函数定义为public、published时,没有在类内引用,那DELPHI
编译器在优化时将不会删除该函数--因为外部可以调用它;
 
同意小五,
编译器回根据你的函数的不同位置进行优化并处理的.
 
错!
unit会被编译到exe中,自己做个试验就知道了,你可以通过去掉unit中的无用单元
减小可执行文件的大小!
 
对于我上面的话补充一句,是对第三方控件的。
也就是说,对于delphi的标准控件,可以优化,第三方控件不能优化。
 
有很多控件的unit里面包含有initialization部分(我就常这么干), 这种unit只要你use了, 它就会包含到你的exe中.
 
Delphi可不管那么多,dcu直接连接, 有什么算什么,不管用没用到
 
menxin兄:
请问你所说的第三方控件是指没有Source Code的第三方控件, 还是指所有的
第三方控件?
 
肯定是要连接进去的,Delphi需要的函数在Dcu文件中,它可不会去优化的,
如果你认为垃圾太多,自己定义Unit时小心点就是了!
 
有没有源码没关系,它连接的是dcu!
 
当然连接了,只要你USES了UNIT
 
按我的理解,未被用到东西不会被连接进去.
以下文字摘自:
http://www.borland.com/delphi/papers/dl120/dl120.html#new_optimizing

New Optimizing Linker
As part of the compilation process, Delphi uses a new 32 bit linking
technology that also includes several optimizations to operate
faster. Because the new smart linker will eliminate both unnused
functions and procedures as well as unused static and virtual
methods, applications are often faster and smaller. By eliminating
virtual methods, developers have greater flexibility in using objects
knowing that any unnecessary code will be removed automatically by
the linker.
 
没有使用的函数或过程是不会连接进区的
不管是一般的过程和函数还是类里的函数或过程(构件使用静态连接时),
有源代码还是没有源代码。

某一个函数究竟有没有连接进可执行文件,运行以下就知道了。
在IDE中运行后,看看改函数的左边有没有“点”就知道了,有点
说明为改行程序产生机器代码了,没有则说明被优化掉了或没有必要产生代码

每一个单元,如果被Use了,都会执行该单元的initialization 和 finalization
Section,不管这个单元有没有显式的包含着两个部分。所以包含了一个没用的单元
程序还是会稍微大一点。
 
陈冲伟:
这个问题已经很长时间没有人参加讨论,为保持版面
整洁,节约网友时间,请提问者选择继续讨论或结束
问题。关于本版管理细则,请参见<a href="http://www.gislab.ecnu.edu.cn/delphibbs/DispQ.asp?LID=111927">这个</a>问题。如两天
内提问者没有响应,我将采取强制措施。请提问者尽
可能自己处理自己的问题。这是您的权利,也是您的
义务。

如有管理建议,请到<a href="http://www.gislab.ecnu.edu.cn/delphibbs/DispQ.asp?LID=111927">这里</a>提出。谢谢!
 
多人接受答案了。
 
后退
顶部