ما هي الأنظمة التي تستخدم تمثيل المؤشر غير الموحد؟ [مكرر

StackOverflow https://stackoverflow.com/questions/3860593

سؤال

تكرار ممكن:
هل هناك أي منصات حيث تكون المؤشرات لأنواع مختلفة أحجام مختلفة؟

لقد قرأت في العديد من الأماكن التي قد يكون لها مؤشرات من أنواع مختلفة تمثيلات مختلفة في تطبيقات C القياسية. هذا شيء يجعل من الضروري إلقاء حجج المؤشر على printf ، على سبيل المثال

int foo;
printf("address is %p\n", (void *) &foo);

كنت متشككًا في هذا الأمر ودخلت من خلال معيار C99 (المستند WG14 N1256 ، متاح في http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf). في 6.2.5.27 يقرأ:

يجب أن يكون للمؤشر إلى الفراغ نفس متطلبات التمثيل والمحاذاة كمؤشر لنوع الحرف. وبالمثل ، يجب أن يكون للمؤشرات للإصدارات المؤهلة أو غير المؤهلة من الأنواع المتوافقة نفس متطلبات التمثيل والمحاذاة. يجب أن يكون لجميع المؤشرات لأنواع الهيكل نفس متطلبات التمثيل والمحاذاة مثل بعضها البعض. يجب أن يكون لجميع المؤشرات لأنواع النقابات نفس متطلبات التمثيل والمحاذاة مثل بعضها البعض. لا تحتاج المؤشرات إلى أنواع أخرى إلى نفس متطلبات التمثيل أو المحاذاة.

لذلك ، يبدو بالفعل وكأنه تطبيق C99 المطابق يمكن أن يستخدم تمثيلات مختلفة لمؤشرات أنواع مختلفة.

سؤالي هو: ما هي التطبيقات/البنى التي تستخدم بالفعل تمثيلات مختلفة لمؤشرات الأنواع المختلفة؟

هل كانت مفيدة؟

المحلول

لم يستطع Classic Cray (لا تعرف عن منتجاتها الجديدة) معالجة الشخصيات ذات المؤشرات العادية ، لذلك char* وبالتالي void* كانت مختلفة عن مؤشرات المتجهات الأصلية.

(انظر تعليق Keith أدناه ، على الرغم من ذلك. ربما كان هناك استخدام ABI مختلف ، ومن خلال تدوير أجزاء العنوان منخفضة الترتيب إلى النهاية عالية الترتيب ، قاموا أحيانًا بعمل "غرامة" و "خشنة" متوافقة مع أ الدرجة العلمية.)

نصائح أخرى

ربما الأكثر شهرة هو معالجات الوضع X86 الحقيقي ، والتي يمكن أن تحتوي على مؤشرات بيانات 16 بت ومؤشرات الوظائف 32 بت اعتمادًا على نموذج الذاكرة الذي اخترته (أو قد يكون لديك مؤشرات بيانات 32 بت مع مؤشرات وظيفة 16 بتات 16 بت ( ، أو شيء مختلف مرة أخرى ...).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top