Alexey S. Smirnov schrieb: > Martin Friebe пишет: >> Is this documented somewhere? I can't follow the logic anyway, the scope >> how much my code uses of another unit can not be predicted, simply by >> where I include the other code? >> >> Actually, I do believe I have seen examples where code form units used >> in the interface was successfully smart-linked. >> >> However there is a differentiation what can be smart linked and what >> not. If a class has RTTI information, then methods from it can not be >> removed by smart-linking. Classes with RTTI (afaik) are either included >> as a whole or not at all. (And that make sense, because RTTI allows to >> access any method by finding it from a resource or literal string; which >> are both not parsed by the compiler, and therefore not determinable) >> >> Best Regards >> Martin >> >> > > May the problem will become understandable, if we will do a little > experiment. So. Let's test the Interface/Implementation Uses sections of > /lazarus/lcl/graphics.pp. This section for Lazarus 0.9.26 was that: > |interface > uses > SysUtils, Math, Types, Classes, Contnrs, FPCAdds, > FileUtil, > FPImgCmn, FPImage, FPCanvas, > FPReadPNG, FPWritePNG, PNGComn, // png support > FPReadBMP, FPWriteBMP, // bmp support > FPReadPNM, FPWritePNM, // png support > FPReadJpeg, FPWriteJpeg, // jpg support > IntfGraphics, > AvgLvlTree, > LCLStrConsts, LCLType, LCLProc, LMessages, LCLIntf, LResources, > LCLResCache, > GraphType, IcnsTypes, GraphMath, InterfaceBase, WSReferences;| > | > implementation > uses > SyncObjs;| > > It was cleanup by me and now looks like that: > |Interface > uses > SysUtils, Types, Classes, > FPImgCmn, FPImage, FPCanvas, > FPReadJpeg, FPWriteJpeg, // jpg support > IntfGraphics, AvgLvlTree, > LCLType, LMessages, LResources,LCLResCache, > GraphType, IcnsTypes, GraphMath, InterfaceBase, WSReferences;| > > > |implementation > uses > {FPReadPNG,} FPWritePNG, PNGComn, // png support > {FPReadBMP,} FPWriteBMP, // bmp support > FPReadPNM, FPWritePNM, // png support > LCLStrConsts,LCLProc,LCLIntf, > FileUtil, FPCAdds, Math, > SyncObjs; > > |So, previously we have 33 Units mentioned in Interface section and 1 in > Implementation section. After cleanup we have 19 Units in Interface > section and 12 in Implementation. 3 Units from Interface section was > completely removed. ;) > > Both Lazarus and all connected apps and projects are working fine with > this cleanup. And if you do the same thing - you will see that that > size of Lazarus will be 15-20 KB less. May be - because of such > optimization, may be - because of removing unused units from *Interface* > section....
This could be simply the influence of a different memory layout of the exe. _______________________________________________ Lazarus mailing list Lazarus@lazarus.freepascal.org http://www.lazarus.freepascal.org/mailman/listinfo/lazarus