On May 21, 2016, at 4:33 AM, Mouse <mouse at
Rodents-Montreal.ORG> wrote:
Most
executables are not performance-critical enough for
dynamic-linker overhead to matter. (For the few that are, or for
the few cases where lots are, yes, static linking can help.)
I keep telling myself
that whenever I launch Firefox after a reboot
...
Do you have reason to think dynamic-linker overhead is a perceptible
fraction of that delay?
[file
formats and protocols]
First off, the C standard mandates that the order of fields
in a
struct cannot be reordered,
Yes. (I think this is a Bad Thing, but I can see why they did it.)
Given that C is a systems implementation language, how would you
define HW related data structures where the order of the fields is
critical (ie HW defines them).
so that just leaves padding and byte order to
deal with.
And data type size. (To pick a simple example, if your bytes are
nonets, you will have an interesting time generating an octet stream by
overlaying a struct onto a buffer.)
And alignment. Not all protocols and file formats place every datatype
at naturally-aligned boundaries in the octet stream.
That?s why there are #pragmas and other compiler directives (i.e. ?packed?)
to handle this.
Now, it may sound cavalier of me, but of the
three compilers I use at
work (gcc, clang, Solaris Sun Works thingy) I know how to get them to
layout the structs exactly as I need them
Great. ...for code that doesn't mind writing off portability to other,
including future, hardware and compilers.
I still don't see why you're citing "it works for my work environment"
as justification for "the C standard should write off anything else?.
My biggest complaint about the C standard is that the order that bits
within a bit field are compiler defined. This basically means that they
are completely unusable for anything that requires interoperability.
TTFN - Guy