اسمي Davide Faconti وعملي هو واحد من الأفضل في العالم: أنا أعمل في الروبوتات .
يتم الحفاظ على هذه المدونة/المستودع في وقت فراغي ولا يرتبط بعملي هناك. لذلك فإن الآراء (والميمات) كلها ملكي ولا تمثل صاحب العمل بأي شكل من الأشكال .
أنا أحب البرمجة C ++ والمصدر المفتوح وهذا "يوميات" هي مساهمتي الصغيرة في مجتمع OSS.
تحسين الكود في C ++ هو شيء لا يمكن لأحد أن يقاومه. يمكنك الاستمتاع والتظاهر بأنك تفعل شيئًا مفيدًا لمؤسستك في نفس الوقت!
في هذا المستودع ، سأقوم بتسجيل بعض أنماط التصميم البسيطة لتحسين الكود الخاص بك وإزالة النفقات العامة غير الضرورية في C ++ .
إذا كنت خبيرًا محنكًا C ++ ، فربما يكون لديك مجموعة من القواعد الخاصة بك بالفعل.
تساعدك هذه القواعد على أن تبدو وكأنها مهندس سيء الحمار/Rockstar/10x لزملائك.
أنت من النوع الذي يسقط عرضًا من std :: vector <> :: الاحتياط قبل حلقة وإيماءات ، يبتسم ، ينظر إلى تحسين الأداء ودهشة عضو الفريق.

نأمل أن تساعدك الأمثلة الواردة في هذا المستودع على تحقيق هذا الوضع من المعلم ، وكآثار جانبية ، تنقذ الكوكب من ظاهرة الاحتباس الحراري ، وتجنيب دورات وحدة المعالجة المركزية عديمة الفائدة من إهدار.
بعد ذلك ، لسوء الحظ ، سيبدأ شخص ما على الجانب الآخر من الكوكب في تعدين عملات البيتكوين أو كتابة تطبيقه في بيثون وكل جهدك لإنقاذ الكهرباء كان لا شيء.
أنا أمزح ، مطوري بيثون ، نحن نحبك!
الراوي: "لم يكن يمزح ..."
أول شيء يجب أن يفعله أي شخص يهتم بالأداء هو:
أنا وزملاؤي مخطئون دائمًا في الأسباب التي تجعل قطعة الكود بطيئة.
في بعض الأحيان نكون على حق ، لكن من الصعب حقًا معرفة كيفية تحسين إعادة الأداء. تظهر أدوات التوصيف الجيدة في الدقائق "الفواكه المنخفضة المعلقة": الحد الأدنى من العمل ، أقصى فائدة!
تلخيص: 10 دقائق التنميط يمكن أن يوفر لك ساعات من التخمين وإعادة إنشاء.
أدوات "Goto" الخاصة بي في Linux هي نقطة ساخنة وكومة. أفهم أن Windows لديه أدوات مماثلة أيضًا.

في الحرب القياسية ، إذا كنت الجندي ، فهذه هي قنابلك اليدوية واليد.
بمجرد أن تعرف أي جزء من الكود يستحق التحسين ، قد ترغب في استخدام Google Benchmark لقياس الوقت الذي تقضيه في فئة أو وظيفة محددة للغاية.
يمكنك حتى تشغيله google benchmark عبر الإنترنت هنا: Quick-Bench.com.

إن كتابة التعليمات البرمجية الجيدة تشبه تنظيف أسنانك بالفرشاة: يجب أن تفعل ذلك دون التفكير كثيرًا في ذلك.
إنها عضلة تحتاج إلى تدريبها ، والتي ستصبح أقوى مع مرور الوقت. ولكن لا تقلق: بمجرد أن تبدأ ، ستبدأ في رؤية أنماط متكررة بسيطة بشكل مدهش وتعمل في العديد من حالات الاستخدام المختلفة.
تنبيه المفسد : واحدة من أكثر الحيل المحبوبة هي تقليل عدد تخصيصات الكومة . ليس لديك أي فكرة عن المبلغ الذي يساعد.
ولكن دعنا نوضح شيئًا واضحًا تمامًا:
بمعنى آخر ، فكر مرتين قبل إجراء أي تغيير في الكود الذي يجعله أقل قابلية للقراءة أو صعوبة في التصحيح ، لمجرد أنك تعتقد أنه قد يعمل بشكل أسرع بنسبة 2.5 ٪.
للحصول على تجربة قراءة أكثر راحة ، تفضل بزيارة: https://cpp-optimizations.netlify.app
استخدم مرجع const افتراضيا.
تحرك الدلالي (تودو).
تحسين قيمة الإرجاع (TODO).
استخدم STD :: Vector <> :: Reserve افتراضيًا
"لقد تعلمت قوائم ربط في الجامعة ، هل يجب أن أستخدمها؟" nooope.
لا تحتاج إلى std::map<> لذلك.
تحسين ناقلات صغيرة
السلاسل (تقريبا) متجهات
عندما لا تقلق: تحسين السلسلة الصغيرة.
سلسلة سلسلة: الإحساس الخاطئ بأمان operator+ .
std::string_view : الحب من النظرة الأولى (تودو).
مثال: 2D/3D يحول الطريقة الصحيحة.
تكرار على مصفوفة ثنائية الأبعاد: أقل أناقة وأكثر أداء.
boost::container::flat_map . لن تتخيل ما حدث بعد ذلك.طريقة أبسط وأسرع لتصفية السحب في PCL.
Fast Palindrome: تكلفة الفروع الشرطية
هذا العمل مرخص بموجب CC BY-SA 4.0