2009-10-15 7 views
10

Lassen Sie mich zuerst klarstellen, dass ich jetzt sehr vertraut bin mit Definitionen von size_t und intptr_t, und ich will keine Wiederholungen dessen, was sie erreichen.size_t ist Zeigergröße in der Praxis

Stattdessen möchte ich Folgendes wissen. Wissen Sie, jede Plattform, mit der Ausnahme x86/DOS (mit seinen unerträglichen Speichermodell), wo der Guss

void* a = ...; 
size_t b = (size_t)a; 

tatsächlich Bits oder Bytes verliert?

Danke!

+7

Warum würden Sie jemals einen Zeiger auf size_t ??? –

+0

Als Nebenbemerkung kann ich mir nicht einmal vorstellen, woher eine solche Frage kommen könnte. Warum solltest du jemals so eine Besetzung machen? Die Größe von "size_t" und die Größe des Zeigers sind völlig unabhängig voneinander. Daher ist es natürlich anzunehmen, dass solche Plattformen im Allgemeinen existieren, unabhängig davon, ob sie in der Realität existieren. – AnT

+1

Es kann nicht gut sein anzunehmen, dass die Größe von 'size_t' und die Größe von Zeigern gleich sind und kein neuer Code mit dieser Annahme geschrieben werden sollte. Ich kann sehen, woher eine Frage wie diese kommen könnte: Legacy-Code. Ich stelle mir vor, dass es eine Menge Codes gibt, die genau diese Annahme treffen. Genauso wie es eine Menge Code gibt, der annimmt, dass ein int oder ein long 32 Bit ist (nicht mehr und nicht weniger - deshalb hat MS das LLP64-Modell für Win64 gewählt). Jemand (vielleicht sogar Jonas) möchte vielleicht herausfinden, ob es sich lohnt, Zeit und Mühe zu investieren, um den Legacy-Code proaktiv zu ändern. –

Antwort

7

AFAIK, auf AS/400 Zeiger sind 128-Bit, aber size_t is defined to be 32-bit.

+0

Interessant! Was bringt sizeof (long)? –

+0

das scheint so lange ist [64-bit] (http://search400.techtarget.com/tip/0,289483,sid3_gci1114170,00.html) aber kann ich nicht sicher sagen. –

+1

Eine wichtigere Frage ist: Können Sie ein Beispiel dafür angeben, wo ein Zeiger auf size_t gültiger Code ist? –