linux-l: OT: Ungenauigkeiten

Thomas Knop t.knop at isv-gmbh.de
Mo Aug 7 14:05:45 CEST 2000


On, Mon, 07 Aug 2000, Siegfried Pohl wrote:
....
> da
> der Hauptspeicher eines Computers immer in Byte gerechnet und auch auch
> in 1-Byte Schritten adressiert wird, gibt es jetzt zwei Moeglichkeiten. 
Vorsicht, böser Irrtum!!!
So ein - ich möchte es in heutiger Zeit mal Quatsch nennen - erlaubt sich
nur Intel. Vernünftige System, wie z.B. Sun Sparc addressieren nur in 
boundaries, dh. ein integer (4 bytes) kann niemals an einer nicht durch
4 teilbaren addresse liegen, ein float (8 bytes) auch nicht. Das kann jeder
ausprobieren:

#include <stdio.h>
int main(){
  int i = 0x41414141; /* = 'AAAA' */
  int  *ip;
  char *cp;

  cp=(char *)&i; cp+=1; /* +=2, +=3 das gleiche */
  ip=(int *)cp;
  printf("%c\n",*ip);
}

Liefert auf Intel immer:
  A
Auf Sun Sparc:
  Bus Error (core dumped)

Dies ist einer der Gründe warum RISC Systeme so wesentlich effizienter 
arbeiten. Intel Systeme müssen in so einem Fall immer 8 Bytes lesen, dann
irrsinnig komplizierte umrechnungen machen um dann erst endlose
taktzyklen später zum zuge kommen.
Beim Entwurf des Pentium 1 (!) hat Intel einen riesen Aufwand betrieben
um dieses Manko zu "tarnen". Tatsache ist aber, daß selbst in Zeiten des
Pentiom III immer noch so ein Quark existiert - und das nur damit auch DOS
3.0 noch läuft ;-) 

Entschuldigung an alle, die mein Hardwaregelaber "ertragen" mussten

Gruß Thomas

--

Thomas Knop               Tel: +49-30-53433408
ISV GmbH Berlin           Fax: +49-30-53433435
Am Treptower Park 75        t.knop at isv-gmbh.de
12435 Berlin            http://www.isv-gmbh.de



Mehr Informationen über die Mailingliste linux-l