Автор Гілка: Всілякі  дурні думки в голову лізуть  (Прочитано 7829 раз)

Михайло Даниленко

  • Гість
Re: Всілякі  дурні думки в голову лізуть
« Відповідей #15 : 2009-03-04 13:40:24 »
А я читав, що g++ використовує повільну для завантаження схему йменування символів :P
(http://people.redhat.com/drepper/dsohowto.pdf)
Цитата: Ulrich Drepper
Another factor in the cost of the lookup algorithm is con-
nected with the strings themselves. Simple string com-
parison is used on the symbol names which are stored
in a string table associated with the symbol table data
structures. Strings are stored in the C-format; they are
terminated by a NUL byte and no initial length field is
used. This means string comparisons has to proceed until
a non-matching character is found or until the end of the
string. This approach is susceptible to long strings with
common prefixes. Unfortunately this is not uncommon.
namespace some_namespace {
   class some_longer_class_name {
      int member_variable;
     public:
      some_longer_class_name (int p);
      int the_getter_function (void);
   };
}
In the new mangling scheme used in today's gcc versions
and all other compilers which are compatible with the
common C++ ABI the names start with the namespaces
and class names and end with the member names. Fig-
ure 6 shows the result for the little example. The mangled
names for the two member functions differs only after the
43rd character. This is really bad performance-wise if the
two symbols should fall into the same hash bucket.

_ZN14some_namespace22some_longer_class_nameC1Ei
_ZN14some_namespace22some_longer_class_name19the_getter_functionEv
Figure 6: Mangled names using the common C++ ABI scheme

Відсутній Сергій Лисовенко

  • Літератор
  • ******
  • дописів: 1489
  • Карма: +0/-0
Re: Всілякі  дурні думки в голову лізуть
« Відповідей #16 : 2009-03-04 19:36:37 »
Хлера: бот гугла це все так файно переклав, що мені одразу все неясно стало  :'(
Якщо Лінукс написали студенти - нехай вони під ним і навчаються.