Mailing list for all users of the OCaml language and system.
 help / color / mirror / Atom feed
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... ...]




      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