unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: Stefan Monnier <monnier@iro.umontreal.ca>
To: Dmitry Antipov <dmantipov@yandex.ru>
Cc: emacs-devel@gnu.org
Subject: Re: Using empty_string as the only "" string
Date: Tue, 24 Apr 2007 13:48:51 -0400	[thread overview]
Message-ID: <jwv8xchisdd.fsf-monnier+emacs@gnu.org> (raw)
In-Reply-To: <462E310C.20400@yandex.ru> (Dmitry Antipov's message of "Tue\, 24 Apr 2007 20\:32\:12 +0400")

> probably I've missed something, but what's the reason(s) to have a
> lot of "" (zero-length) strings ? Why not uniq them into the only
> one ?

Because it has the disadvantage of leading to subtly different behavior,
while the benefit is at best very marginal, if any.


        Stefan


PS: But if you're interested in such small optimizations, I have another one
in my local Emacs where the Lisp_String data type is changed to:

   struct Lisp_String
     {
       EMACS_INT size;
       EMACS_INT size_byte : BITS_PER_EMACS_INT - 1;
       unsigned inlined : 1;	/* 0 -> ptr, 1 -> chars; in union below.  */
       INTERVAL intervals;		/* text properties in this string */
       union
       {
         unsigned char *ptr;
         unsigned char chars[STRING_MAXINLINE];
       } data;
     };

this way, on 32bit systems, strings of up to 3 bytes can be represented with
just a Lisp_String without any `sdata'.  On 64bit systems, this can be used
for strings up to 7 bytes long (i.e. almost 50% of all allocated strings,
IIRC).  And it can also be used for all the strings in the pure space (no
matter how long), so it saves about 50KB of pure space (can't remember the
exact number, but IIRC it was more than 10KB and less than 100KB).

  parent reply	other threads:[~2007-04-24 17:48 UTC|newest]

Thread overview: 59+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-04-24 16:32 Using empty_string as the only "" string Dmitry Antipov
2007-04-24 17:05 ` Juanma Barranquero
2007-04-24 18:11   ` Andreas Schwab
2007-04-24 18:50     ` Juanma Barranquero
2007-04-24 21:38       ` Andreas Schwab
2007-04-24 21:54         ` Juanma Barranquero
2007-04-24 22:11           ` Andreas Schwab
2007-04-24 22:54             ` Juanma Barranquero
2007-04-24 21:57         ` David Kastrup
2007-04-24 22:07           ` Lennart Borgman (gmail)
2007-04-24 22:29             ` David Kastrup
2007-04-24 22:35               ` Andreas Schwab
2007-04-25  0:55                 ` Kenichi Handa
2007-04-25  9:51                   ` Andreas Schwab
2007-04-25  9:58                     ` David Kastrup
2007-04-25 10:50                       ` Andreas Schwab
2007-04-24 22:40               ` Lennart Borgman (gmail)
2007-04-24 22:12           ` Andreas Schwab
2007-04-24 22:31             ` David Kastrup
2007-04-24 22:56               ` Andreas Schwab
2007-04-24 21:39       ` Miles Bader
2007-04-24 21:45         ` Juanma Barranquero
2007-04-24 22:11           ` Miles Bader
2007-04-24 22:59             ` Juanma Barranquero
2007-04-24 23:37               ` Miles Bader
2007-04-24 23:44                 ` Johan Bockgård
2007-04-25  1:47                   ` Miles Bader
2007-04-25 14:52                   ` Richard Stallman
2007-04-26 15:03                     ` Daniel Brockman
2007-04-27 20:40                       ` Richard Stallman
2007-04-25  2:05       ` Richard Stallman
2007-04-25 12:00         ` Juanma Barranquero
2007-04-25  2:05   ` Richard Stallman
2007-04-24 17:48 ` Stefan Monnier [this message]
2007-04-25  2:05   ` Richard Stallman
2007-04-26 14:24   ` Dmitry Antipov
2007-04-25  2:05 ` Richard Stallman
  -- strict thread matches above, loose matches on Subject: below --
2007-04-25  5:38 using " dmantipov
2007-04-25  5:49 ` Miles Bader
2007-04-25 11:50 ` Juanma Barranquero
2007-04-25 11:56 ` Kenichi Handa
2007-04-25 13:22   ` Dmitry Antipov
2007-04-25 16:07     ` Stefan Monnier
2007-04-26  4:23 ` Richard Stallman
2007-04-26 13:03   ` Dmitry Antipov
2007-04-27  6:00     ` Richard Stallman
2007-04-27 10:04       ` Dmitry Antipov
2007-04-27 10:29         ` David Kastrup
2007-04-28  4:06         ` Richard Stallman
2007-04-28  8:54           ` Dmitry Antipov
2007-04-28 18:35             ` Richard Stallman
2007-06-05 15:43               ` Juanma Barranquero
2007-06-05 19:17                 ` Richard Stallman
2007-06-05 19:45                   ` Juanma Barranquero
2007-06-06  1:17                     ` Stefan Monnier
2007-06-06 11:04                       ` Juanma Barranquero
2007-06-06 22:09                         ` Richard Stallman
2007-06-08 15:49                           ` Juanma Barranquero
2007-06-08 19:16                             ` Stefan Monnier

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

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=jwv8xchisdd.fsf-monnier+emacs@gnu.org \
    --to=monnier@iro.umontreal.ca \
    --cc=dmantipov@yandex.ru \
    --cc=emacs-devel@gnu.org \
    /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.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).