comp.lang.ada
 help / color / mirror / Atom feed
From: "Randy Brukardt" <randy@rrsoftware.com>
Subject: Re: Size optimization for objects
Date: Thu, 11 Jul 2013 19:35:23 -0500
Date: 2013-07-11T19:35:23-05:00	[thread overview]
Message-ID: <krnj0b$sea$1@loke.gir.dk> (raw)
In-Reply-To: b4791rF6i9hU1@mid.individual.net

"Niklas Holsti" <niklas.holsti@tidorum.invalid> wrote in message 
news:b4791rF6i9hU1@mid.individual.net...
> On 13-07-10 13:57 , Rego, P. wrote:
>>>> and the read size of bla.o is 611 bytes.
>>> What do you mean by "read size"? Perhaps this is a typo, and you meant
>>> to write "real size"?
>>> If you mean the total size of the file bla.o (from the directory
>>> listing, e.g "ls -l"), this is not a useful comparison, because the file
>>> contains much more data than just the machine code: there are headers,
>>> symbol tables, and other debug information -- among other things, the
>>> information that "nm" uses to associate machine code addresses with
>>> identifier symbols.
>>
>> Yes, it is from directory listing. In this case, the 'size' provided
>> by "ls -l" should be bigger, right?
>
> Yes, if you consider only the size of the code ("text" segment). For
> data, if the program contains uninitialized, statically allocated
> variables, the file size can be smaller than the "memory image" size,
> because the .o file only describes those variables (name, size, address
> or offset) but does not provide values for the variables.

To provide a bit more background: the size of an .o file is correlated to 
the associated code size, but it (probably) has no relation to the data size 
at all.

(I'm going to explain how Janus/Ada and some ancient C compilers handled 
these files; I would expect GCC and GNAT to be similar, but I don't know for 
certain.)

.o files have a bunch headers and typcially three segments: .text (which 
contains code), .data (which contains *initialized* data), and .bss (which 
contains *uninitialized* data). There is also some relocation information 
for the code, so the .o file is generally quite a bit larger than contained 
code alone.

For Janus/Ada, we put values of *constants* (string literals, float 
literals, static aggregates, etc.) into the .data segment, but not any 
variables. Those all go into the .bss segment. (We did that to support 
putting the code and constants into EEPROM; the data (in the .bss) is the 
only part that has to be mapped to RAM.)

The .data segment is also present in its entirety in the .o file (it has to 
be, in order to have those initial values). But the .bss segment is just a 
header specifying it's size; it has no contents at all and thus contributes 
almost nothing to the size of the .o file.

So for Janus/Ada, an .o file is code size + constants size + headers. The 
data size doesn't have any impact on the .o file size at all. It's possible 
that GNAT might put some initialized things into the ".data", but I highly 
doubt it would do that for anything that is really uninitialized.

Hope this clarifies things.

                                             Randy.




  reply	other threads:[~2013-07-12  0:35 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-06-28 19:49 Size optimization for objects Rego, P.
2013-06-29  7:10 ` Georg Bauhaus
2013-07-01 13:56   ` Rego, P.
2013-07-01 16:49     ` G.B.
2013-06-29  9:48 ` Jack Daniels
2013-07-01 13:58   ` Rego, P.
2013-06-30 11:34 ` rrr.eee.27
2013-07-01 14:35   ` Rego, P.
2013-07-01 15:28     ` Niklas Holsti
2013-07-01 16:35       ` Rego, P.
2013-07-01 18:21         ` Niklas Holsti
2013-07-02 20:32           ` Rego, P.
2013-07-06 16:06             ` Niklas Holsti
2013-07-10 11:57               ` Rego, P.
2013-07-10 11:58                 ` Rego, P.
2013-07-11  9:10                   ` Niklas Holsti
2013-07-18 14:09                     ` Rego, P.
2013-07-18 14:10                       ` Rego, P.
2013-07-11  8:35                 ` Niklas Holsti
2013-07-12  0:35                   ` Randy Brukardt [this message]
2013-07-18 15:16                     ` Rego, P.
2013-07-18 15:12                   ` Rego, P.
2013-07-18 17:57                     ` Niklas Holsti
2013-07-19  5:02                     ` Randy Brukardt
2013-07-19 13:20                       ` Eryndlia Mavourneen
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox