Autor: Artur Gawryszczak (gawrysz_at_camk.edu.pl._!_!_!_)
Data: Thu 20 Mar 2003 - 21:00:36 MET
Marcin Lewandowski wrote:
> Nie mam akurat linuksa pod ręką, ale weź sprawdź kompilację zgodną z
> ansi czy jakoś tak. Daję sobie ***[1] obciąć, że na samym początku w C
> char był tyle co int. Zmienili to w C++ oraz w standardowych
> ustawieniach gcc.
Wg. książki K&R "ANSI C" char ma pomieścić dowolny element zbioru znaków
danej instalacji. Opis <limits.h> specyfikuje że nie może to być mniej
niż 8 bitów. Stosowanie 16, czy 32 bitów wszędzie, gdzie znaki mają
reprezentacje 8-bitowe byłoby głupotą ze względu na marnowanie pamięci i
mogłoby powodować znaczne zmniejszenie prędkości wszelkich operacji na
tekście ze względu na ograniczone rozmiary cache procesora. W praktyce
nie widziałem jeszcze kompilatora, który pod zwykły char domyślnie brałby
więcej niż 1 bajt pamięci. Jedynie czasem się zdarza, że np. w
strukturach między char a double (lub cokolwiek innego dłuższego niż 1
bajt) zostawia sie parę bajtów miejsca, aby double zaczynał się od adresu
podzielnego przez 2, 4, 8, czy ile tam jest dobrze dla danego procesora
(aligning).
-- Pozdrówka, Artur
To archiwum zostało wygenerowane przez hypermail 2.1.7 : Wed 19 May 2004 - 09:42:09 MET DST