难道就没有真正的高手吗,不要以为简单,有本事答出来!(50分)

  • 主题发起人 笑天宇
  • 开始时间

笑天宇

Unregistered / Unconfirmed
GUEST, unregistred user!

you know,在一个project中,
①包含在这个工程中的单元自然会被编译到。
②also we know,和此工程在一个目录中的单元,(但不包含在此工程)也会被编译到.
③另外在search path中指定目录下的单元(但不包含在此工程)也会被编译到。
问题来了,把②,③情况下的单元同时都放在工程中和不包含在工程中有什么区别,
是不是编译以后产生的exe文件会变大???
 
不会的!
 
一样大。
加不加在prj中只是跟你管理这个prj有关,但编译出的exe是一样大的,因为这些单元都被
编译进去了,少一个都会编译不过。
 
似乎编译不是全部都要的只是选取有用的代码编译成机器码。
这就是为什么只要修改过的程序就会和以前的大小不一样。但每次编译肯定是打下一样的
文件大小和引用的单元有关。 似乎 API 的就不大, Application.messagebox() 比 Messagebox()
大很多!
不过下再不是考虑大小的年代了。君不见都是快速开发吗!要的是速度。剩下的就交给硬件了!
 
有趣的问题。

我没有试过,我的理解:
一个unit不加到project但在同一个目录下,其中的对象是可以在project中使用的,如果
这些unit不被编译到exe中,那exe拿到其它地方怎么使用?难道要带上dcu?编译进去exe
怎么会大小不变?
 
2 成立吗??

search path 是何意,你明白吗?

改变"Build with runtime packages ",exe 文件的大小就不一样了。
 
就一秒钟,我发现我上个回答的错误了:
exe文件大小不会变,因为编译器是将project中各unit中uses部分指定的unit编译进exe的
(好像即使uses中指定了某unit,但实际中根本没有用到该unit中的对象的,也不会被编
译进exe中),如果不uses某个project外的unit,其中的对象当然也无法使用!
 
知道 SmartLink 技术吗?

 
没uses进工程的单元和你编译出的exe 毫不相干。
 
②also we know,和此工程在一个目录中的单元,(但不包含在此工程)也会被编译到.
③另外在search path中指定目录下的单元(但不包含在此工程)也会被编译到。

以上两条不成立吧


 
To :笑天宇
  我没听说过有下面两种说法,有这样说的吗?从哪里来的?介绍介绍
②also we know,和此工程在一个目录中的单元,(但不包含在此工程)也会被编译到.
③另外在search path中指定目录下的单元(但不包含在此工程)也会被编译到。
 
編譯時間的差異
 
高手。。。。。。

你也许没觉得自己是高手,但你用这样充满挑衅意味的题目,
是否意味着你其实很狂妄?我不知道,只是觉得在提问的时候
没有必要使用这种题目,老老实实的描述自己的问题,效果应该
比这个好的多。
 
不管在不在工程中,引用(uses)总是从 .dpr 开始,以它为根结点展开,首先搜索工程
所在目录,然后搜索默认的search path(除非你手工从别的地方加入工程文件——编译器
当然会按照你指定的路径去搜索)。
有没有包含在工程中和有没有被Uses是两回事,你完全可以只uses一个.pas文件而不将其
加入到工程中——只要编译器能够在当前目录和搜索路径找到就可以了。
 
同意楼上的[8D]
 
肯定不会因为这个变大的,如果如你所说,那用Delphi写的程序,不过要把所有的
东西都要打包进去,包插GUI的实现。那样的话,一个程序可能至少也要几十M不至
了,那还要Dll、Packet干吗?

Delphi编译程序只是取其所需,你就是有一个数十M的单元连接进来,但你只用到其
中一个函数,Delphi也只会把这一个函数编译进来,而不是整个单元。

 
这种问题还要问,真是猪脑!
没有包含在工程文件中,但引用到的单元你如果包括Form之类的对象,访问就会出错
对这些对象你必须在工程文件中明确引入; 在DELPHI中只有一部分单元的引入会增
大程序,不是所有单元都会使EXE文件增大,最明显的是 Forms 单元,不管你程序内使
用没有,只要引入将会使EXE增大,其他单元一般是不会使程序增大的
 

Similar threads

D
回复
0
查看
820
DelphiTeacher的专栏
D
D
回复
0
查看
791
DelphiTeacher的专栏
D
D
回复
0
查看
869
DelphiTeacher的专栏
D
顶部