From: John Prevost <prevost@maya.com>
To: Xavier Leroy <Xavier.Leroy@inria.fr>
Cc: caml-list@inria.fr
Subject: Re: Strange hugeness of .o, .cmo, and .cmi files
Date: 31 Mar 1999 16:36:20 -0500 [thread overview]
Message-ID: <ya2k8vxibor.fsf@zarya.maya.com> (raw)
In-Reply-To: Xavier Leroy's message of "Wed, 31 Mar 1999 17:59:12 +0200"
Xavier Leroy <Xavier.Leroy@inria.fr> writes:
> It's hard to say what's happening without seeing the source or the
> generated assembly code. If that kind of things doesn't scare you,
> just compile with ocamlopt -S and look at the resulting .s file.
> However, I'll venture a guess:
The source is almost exactly as you see, for the most part. I can
package it along to you if you'd like.
The start of the notably huge part of the .s file is at the end of
this message.
> OCaml 2.01 had a known code size problem with the
> { record with lbl = newval } construct, when "record" belongs to a
> type with many labels. This was fixed in OCaml 2.02, however.
I've been using 2.02 nearly since it came out, so it's not a 2.01 vs
2.02 problem. All I'm doing is:
let get_bool e n = try e.booleans.(n) with _ -> false
let get_number e n =
try
let contents = e.numbers.(n) in
if contents = -1 then None else Some contents
with _ -> None
let get_string e n =
try
let start = e.strings.(n) in
if start = -1 then
None
else
let finish = String.index_from e.string_table start '\000' in
Some (String.sub e.string_table start (finish - start))
with _ -> None
let process_entry e =
let get_bool = get_bool e in
let get_number = get_number e in
let get_string = get_string e in
{ auto_left_margin = get_bool 0;
auto_right_margin = get_bool 1;
no_esc_ctlc = get_bool 2;
[ ... for 463 total lines ... ]
enter_right_hl_mode = get_string 389;
enter_top_hl_mode = get_string 390;
enter_vertical_hl_mode = get_string 391 }
I'd guess from the below that it's for some reason making a long entry
in the frametable for each one of the lines above. I don't know
enough about how ocamlopt generates code to know what that means.
John.
Partial .s file:
Terminfo_frametable:
.long 502
.long .L648
.word 4
.word 0
.align 4
.long .L646
.word 16
.word 1
.word 8
.align 4
.long .L645
.word 12
.word 1
.word 0
.align 4
.long .L644
.word 12
.word 1
.word 0
.align 4
.long .L643
.word 12
.word 0
.align 4
.long .L642
.word 12
.word 0
.align 4
.long .L640
.word 12
.word 0
.align 4
.long .L639
.word 12
.word 1
.word 4
.align 4
.long .L638
.word 12
.word 1
.word 0
.align 4
.long .L636
.word 1852
.word 462
.word 0
.word 4
.word 12
.word 16
.word 20
.word 24
.word 28
.word 32
.word 36
.word 40
[ ... counting up by 4 to ... ]
.word 1844
.word 3
.align 4
.long .L633
.word 1852
.word 461
.word 0
.word 4
.word 12
[... again, counting down the .word 461 until it is .word 1, with one
less entry after each time... ]
[... a few more smaller bits... ...]
prev parent reply other threads:[~1999-04-01 10:46 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
1999-03-31 6:19 John Prevost
1999-03-31 15:59 ` Xavier Leroy
1999-03-31 21:36 ` John Prevost [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=ya2k8vxibor.fsf@zarya.maya.com \
--to=prevost@maya.com \
--cc=Xavier.Leroy@inria.fr \
--cc=caml-list@inria.fr \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox