Path: utzoo!utgpu!watmath!clyde!att!osu-cis!tut.cis.ohio-state.edu!husc6!rutgers!bellcore!texbell!sneaky!gordon From: gordon@sneaky.TANDY.COM (Gordon Burditt) Newsgroups: comp.unix.wizards Subject: Re: IEEE 1003.2 Message-ID: <5515@sneaky.TANDY.COM> Date: 19 Dec 88 01:51:57 GMT References: <9137@smoke.BRL.MIL> <33251@think.UUCP> <14946@mimsy.UUCP> <4407@xenna.Encore.COM> Reply-To: gordon@sneaky.UUCP (Gordon Burditt) Organization: Gordon Burditt Lines: 66 >For that matter why not just combine tar and ar and add a flag to tar >to include an archive symbol table (and have tar recognize this has >been done on input.) It seems the two functions of these utilities >barely needs to be distinguished. A simple shell script could replace This is likely to cost quite a bit in disk space to store libraries, and would probably at least double storage requirements. Lots of the object files in libraries are tiny. A considerable number of them just load a couple of registers and execute some kind of trapping instruction. These are likely to be smaller than the amount of disk space used by an inode plus a directory entry. Take, for example, the libc.a on my system (Tandy 6000). There are 202 files in libc.a, and it takes up 211 512-byte blocks, not counting indirect blocks. The average size of an object file, including the ar header, is 534 bytes. If you used tar, the same library would take up 404 512-byte blocks, minimum, and the average size of an object file, including the tar header, would be at least 1024 bytes. (None of the object files are empty, so each would take up 1 block for the data plus one for the tar header.) Actually the total size would be closer to 530 blocks. If you used the (Sys V) file system with a 512-byte blocksize, the files would take up 328 512-byte blocks for data, plus 26 blocks for inodes, plus 7 blocks for directory entries. (calculated using the SysV file system, but the BSD file system would use about the same for directory entries), for a total of 361 512-byte blocks. If you used the (Sys V) file system with a 1024-byte blocksize, the files would take up about 492 512-byte blocks, plus 26 blocks for inodes and 8 blocks for directory entries, for a total of 526 512-byte blocks. Summary: Method Size ar 211 Filesys 512 361 Filesys 1024 526 tar 530 Disk space is NOT the only important feature about an object library format. It's not totally unimportant, either. Disk I/O for typical link: These are all fairly close to the same, as long as a convention exists to find the index easily. Tar formats would probably have to adopt a method of reading the last block and scanning backwards to find the index. Ease of updating: Filesystem libraries are a big win. Tar loses, since it adds replacement object files on the end without removing the old one, thus, the library is perpetually growing. The index-builder also has to be careful not to include references to outdated modules. Portability: Filesystems are not very portable by themselves, but there are plenty of tools to package bunches of files (like tar) for transportation. Tar and ar formats are reasonably portable (I did not say mailable or postable). Of course, object files themselves have limited portability. Gordon L. Burditt ...!texbell!sneaky!gordon