程序编译执行后,如果有些单元中的函数或资源在程序中没有用到,编译器会不会自动把这些单元从程序中删除?

解决方案 »

  1.   

    Delphi不知道。
    C可以,比如你的工程中有一个文件a.c,文件里有一些函数。如果工程没有使用a.c中的任何函数,编译器就不会把a.c链接进最终exe文件。
      

  2.   

    KAO,不是说DELPHI编译器很聪明吗?
      

  3.   

    有人对Delphi不客气,俺就对他不客气:不知道就别瞎嚷嚷!
        首先,Delphi编译器决不会把uses中列出的单元全部都编译到目标文件中去;(因此新建一个Form时Delphi会自动在uses子句中加入常用的单元列表,不用你自己敲,把你当作傻瓜向你提供方便你却认为Delphi不聪明!)
        其次,对于需要编译到目标文件的单元,也只是编译可能被使用到的代码。(如果你写的垃圾代码堆成了山,而在程序运行时有很多代码无论如何不会被调用,那么Delphi显然不会把它们连接进来,至于为何不把uses子句中未使用的单元删除掉,原因很简单嘛,谁知道你是暂时不用还是决不再用呢?自动删了,下次却需要你自己添加,你不是又要说Delphi不聪明了?)
        简单地说,当你成功编译一个工程后,看看源代码中标记有蓝色圆点的行,那些才是最后被编译到目标文件中的。而在生成可执行文件之前,则肯定要对所有引用的单元以及所有源代码进行编译,否则不可能正确取舍有效代码,甚至根本不能进行连接(比如其中任何一个单元发生了任何一个错误时)。结案陈词:Delphi的聪明不是一般人能明白的,特别是那些既不热爱Delphi又不很聪明的人。
    至于与C编译器比较,由于俺本人对C编译器的了解甚少,所以不敢胡言乱语。不过,在很多情况下,实现基本相同的功能,用VC生成的EXE要比用Delphi生成的EXE大很多,不知道是什么原因???
      

  4.   

    cnsuyong(小可)说得好
    我一直在用DELPHI,但有很多东西不懂。
      

  5.   

    DELPHI的编译器确实比较聪明,不会链接无用的代码。但是资源应该会连接的。
      

  6.   

    同意小可;
    另外Delphi要比VC快的多的多
      

  7.   

    zhwei80(zw) 
       你这句话应该是身为楼主的我说吧.
      

  8.   

    VC的文件编译后比DELPHI大  谁说的  用没用过  如果你老是把MFC静态链接 当然会大了 因为MFC毕竟是包容了几乎所有根系统开发有关的代码  效率问题你就说得更不对了 MFC 程序对消息的处理不是通过类似于虚函数的东西 他是通过宏 来直接对wndproc进行的操作 所以他不用维护什么函数联接表 如果 你不会写一些常规的c程序 而去拿d的思想去写c的代码 结果出来的垃圾代码的执行效率当然会低很多
      

  9.   

    我很佩服DELPHI的智能性。我举个简单例子
    procedure XXXX();
    var
      a, b: integer;
    begin
      a := 3;
      .......
    ////上面的代码只访问了a, 而下面的代码只访问了b
      b := 4;
      ......end;DELPHI会优化为a和b使用同一个空间。即是只有一个integer变量。
      

  10.   

    这叫啥见地阿?楼主,你不是开这个帖就想听这一句吧?好的编译器让很多搞了多年的汇编程序员看了都感到自卑,怎么只有0,1呢?不过Delphi没有这么牛
      

  11.   

    TO biu(小兔子):
    >> VC的文件编译后比DELPHI大  谁说的  用没用过  如果你老是把MFC静态链接 当然会大了 因为MFC毕竟是包容了几乎所有根系统开发有关的代码那你试着用动态链接看看,是不是在没有MFC的情况下都能正常运行?
    你知不知道Delphi默认就是静态链接的,如果你用过Delphi,试着把BPL文件编译为动态包,看看谁生成的文件大?!
      

  12.   

    Borland公司的编译器是目前为止性能最佳的编译器
    她的编译速度,目标代码的高效
    是从DOS下就一直延续过来的相信各位都学过C吧
    相信各位学C的时候是用 Turbo C 吧
    相信各位都知道 Turbo C 是 Borland 在产品吧
      

  13.   

    VC Release 很小的。要比DELPHI小很多!不是1M 而是 好多,
    至于速度,DELPHI就根本没法比了,高级语言始终要慢过中级语言。
    至于说到高校是说那的库和目标出现效率高,代码的速度没法跟C比,
    但是DEL的开发速度奇快,所以学了2年的C后,我现在学了DEL
      

  14.   

    uses子句中未使用的单元如果不删除掉,变异出来的文件还是会变大的.
    我做过试验,没删除前比删除后编译出来的程序大.
      

  15.   

    pchaos(无言,独上西楼) 
    那时因为你引用的单元有资源,或者类似原全局变量之类的东西!
    以上的试验我在Turbo Pascal下做过试验!
    如下:
    Pascal一般不会删除掉你Uses里的申明,但多余的单元一般不会编入文件!
    而Borland C++ 也具有同样的功能,只要库文件里没有Class
    以上就是两款DOS编译器的“智商”
    在Windows下我没有研究过,我认为你有 1XXGB 的硬盘,还会在乎 一两兆的空间吗?
    不过我始终认为Delphi的编译速度是最快的!
    但目标代码的效率问题,我认为和C++应该差不多吧!
    不要用C++的编译速度和Delphi比较,没有可比性……hehe....我认为…………