سؤال

لذلك بعد البحث في المحركات كثيرًا ، كنت أقوم ببناء إطار ثنائي الأبعاد لجهاز iPhone. كما تعلمون ، فإن عالم هندسة المحرك واسع ، لذا فقد كنت أحاول تطبيق أفضل الممارسات قدر الإمكان.

لقد كنت أستخدم:

uint_fast8_t mId;

إذا بحثت عن تعريف uint_fast8_t أجد:

/* 7.18.1.3 Fastest-width integer types */
...
typedef uint8_t          uint_fast8_t;

لقد كنت أستخدم هذه الأنواع عبر الكود الخاص بي - سؤالي هو ، هل هناك فائدة أداء لاستخدام هذه الأنواع؟ وما الذي يحدث بالضبط وراء الكواليس؟ إلى جانب الحقيقة الواضحة المتمثلة في أن هذا نوع البيانات الصحيح (عدد صحيح غير موقّع 8 بت) للبيانات ، هل من المفيد أن يتغلب على هذا الكود؟

هل هذا هو التحسين الذي لا داعي له من المحتمل أن يعتني به المترجم على أي حال؟

شكرًا.

تحرير: لا توجد ردود/إجابات ، لذلك أضع مكافأة على هذا!

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

المحلول

يتم تعريف أنواع عدد صحيح "سريع" على أنها أسرع نوع عدد صحيح متاح مع على الأقل كمية البتات المطلوبة (في هذه الحالة 8).

إذا كان النظام الأساسي الخاص بك يعرّف UINT_FAST8_T باسم UINT8_T ، فلن يكون هناك فرق في السرعة على الإطلاق.

والسبب هو أنه قد تكون هناك أبناء أبطأ عند عدم استخدام طول الكلمة الأصلية. على سبيل المثال ، يمكنني العثور على مرجع واحد حيث تم تعريف معالجات alpha uint_fast_8_t على أنها "غير موقعة".

نصائح أخرى

uint_fast8_t هو أسرع عدد صحيح مضمون أن يكون بعرض 8 بتات على الأقل. اعتمادًا على النظام الأساسي الخاص بك ، يمكن أن يكون عرضه 8 أو 16 أو 32 بت.

لا يتم الاعتناء به من قبل المترجم نفسه ، فهو يجعل برنامجك ينفذ بشكل أسرع بالفعل

إليك بعض الموارد التي وجدتها ، ربما كنت قد رأيتها بالفعل http://embeddedgurus.com/stack-overflow/2008/06/ffilect-c-tips-1-choosing-the-correct-integer-size/

http://www.mail-archive.com/avr-gcc-list@nongnu.org/msg03149.html

في Mingw64 قيل هكذا

/*  7.18.1.3  Fastest minimum-width integer types
 *  Not actually guaranteed to be fastest for all purposes <---------------------
 *  Here we use the exact-width types for 8 and 16-bit ints.
 */
typedef signed char int_fast8_t;
typedef unsigned char uint_fast8_t;
typedef short  int_fast16_t;
typedef unsigned short  uint_fast16_t;
typedef int  int_fast32_t;
typedef unsigned  int  uint_fast32_t;
__MINGW_EXTENSION typedef long long  int_fast64_t;
__MINGW_EXTENSION typedef unsigned long long   uint_fast64_t;

لذلك أعتقد أنه لا يزال يوصى باستخدام حجم INT الأصلي باستثناء المصفوفات الكبيرة

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