رفتن به مطلب
مرجع رسمی سی‌پلاس‌پلاس ایران

سروش ربیعی

اساتید
  • تعداد ارسال ها

    8
  • تاریخ عضویت

  • آخرین بازدید

  • روز های برد

    3

تمامی مطالب نوشته شده توسط سروش ربیعی

  1. سروش ربیعی

    داخل یک ترد غیر از ترد اصلی برنامه تمام فایل‌ها رو rename کنید. زیاد کردن تعداد تردها برای عملیات IO روی فایل خصوصاً در این مورد هیچ کمکی نمی‌کنه که هیچ، به احتمال زیاد سرعت رو هم پایین میاره.
  2. اگر این بار مشکل خاصی نتراشند ان‌شاءالله در نسخهٔ ۵٬۱۳ تقویم فارسی خواهیم داشت. تغییرات مربوطه تکمیل شده‌اند و از طریق آدرس زیر در دسترس هستند: Gerrit Code Review
  3. سروش ربیعی

    هدر فایل کامپایل نمیشه. بخشی از هدر که در کد وارد شده کامپایل میشه. داخل ممکنه تعریف‌هایی وجود داشته باشه. مثلا: header.hpp: static const SomeComplexStruct; در این صورت خوب مسلماً فایلی که این هدر رو اینکلود کرده باشه حافظهٔ بزرگتری اشغال می‌کنه (هم توی ایمیج هم توی رانتایم). ولی در حالت کلی همهٔ چیزهایی که توی هدر هستند کامپایل نمیشن. مثلا اگر هدرها تماماً از اعلان‌های کلاس‌ها و توابع تشکیل شده باشند چیزی کامپایل نمیشه. (معمولاً داخل هدر فقط اعلان قرار داده میشه) مثال: // header.hpp struct bar { int x; int y; double z; }; class foo { public: bar x; bar y; bar z; }; #include <iostream> #include "header.hpp" // does not matter int main() { std::cout << "Hello World!\n"; return 0; } خروجی هر دو حالت: .file "main.cpp" .text .section .rodata .type _ZStL19piecewise_construct, @object .size _ZStL19piecewise_construct, 1 _ZStL19piecewise_construct: .zero 1 .local _ZStL8__ioinit .comm _ZStL8__ioinit,1,1 .LC0: .string "Hello World!\n" .text .globl main .type main, @function main: .LFB1493: .cfi_startproc pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset 6, -16 movq %rsp, %rbp .cfi_def_cfa_register 6 leaq .LC0(%rip), %rsi leaq _ZSt4cout(%rip), %rdi call _ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc@PLT movl $0, %eax popq %rbp .cfi_def_cfa 7, 8 ret .cfi_endproc .LFE1493: .size main, .-main .type _Z41__static_initialization_and_destruction_0ii, @function _Z41__static_initialization_and_destruction_0ii: .LFB1977: .cfi_startproc pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset 6, -16 movq %rsp, %rbp .cfi_def_cfa_register 6 subq $16, %rsp movl %edi, -4(%rbp) movl %esi, -8(%rbp) cmpl $1, -4(%rbp) jne .L5 cmpl $65535, -8(%rbp) jne .L5 leaq _ZStL8__ioinit(%rip), %rdi call _ZNSt8ios_base4InitC1Ev@PLT leaq __dso_handle(%rip), %rdx leaq _ZStL8__ioinit(%rip), %rsi movq _ZNSt8ios_base4InitD1Ev@GOTPCREL(%rip), %rax movq %rax, %rdi call __cxa_atexit@PLT .L5: nop leave .cfi_def_cfa 7, 8 ret .cfi_endproc .LFE1977: .size _Z41__static_initialization_and_destruction_0ii, .-_Z41__static_initialization_and_destruction_0ii .type _GLOBAL__sub_I_main, @function _GLOBAL__sub_I_main: .LFB1978: .cfi_startproc pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset 6, -16 movq %rsp, %rbp .cfi_def_cfa_register 6 movl $65535, %esi movl $1, %edi call _Z41__static_initialization_and_destruction_0ii popq %rbp .cfi_def_cfa 7, 8 ret .cfi_endproc .LFE1978: .size _GLOBAL__sub_I_main, .-_GLOBAL__sub_I_main .section .init_array,"aw" .align 8 .quad _GLOBAL__sub_I_main .hidden __dso_handle .ident "GCC: (Ubuntu 7.3.0-27ubuntu1~18.04) 7.3.0" .section .note.GNU-stack,"",@progbits
  4. سروش ربیعی

    اضافه کردن فایل‌های هدر هیچ تأثیری در حجم برنامهٔ نهایی نداره. فقط توابعی که کامپایل شدن (کد باینری برای اون‌ها تولید شده) در باینری نهایی جا می‌گیرن.
  5. سروش ربیعی

    نه هیچ برنامه‌ای به‌طور خودکار در چند ترد اجرا نمیشه. دلیل این که تعداد زیادی هسته رو درگیر می‌بینید سرعت بالای context switch هست. برای این که ببینید هر پردازه چند ترد ایجاد کرده از دستور زیر استفاده کنید: ps huH p با خوندن اطلاعات procfs هم میشه: cat /proc//status | grep Threads
  6. سروش ربیعی

    راهی نداره. باید با تحلیل داده‌های رسیده از پورت استنتاج کنید که جواب کدام دستور ارسال شده بوده. یک راه دیگه اینه که از پروتکل‌های پیچیده‌تر مثل McBSP یا Multichannel Buffered Serial Port استفاده کنید که البته کیوت ساپورت نمی‌کنه
  7. سروش ربیعی

    توی تنظیمات نباید ست بشه که استاندارد کامپایل C++11 هست؟ یعنی پیش‌فرض‌ش C++98 هست یا صرفاً پیاده‌سازی ماکرو باگ داره؟
  8. سروش ربیعی

    استفاده از توزیع‌های آماری برای تولید اعداد تصادفی سرعت رو پایین میاره. چون مشخهٔ آماری توزیع (مثلاً توی مورد شما توزیع یکسان) باید در هنگام تولید اعداد رعایت بشه. به همین خاطر موقع تولید عدد ممکنه سه یا چهار بار عدد تصادفی تولید بشه. این مسأله موقع استفاده از توزیع‌های آماری پیچیده‌تر مثل توزیع نرمال شدیدتر هم میشه. تولید عدد تصادفی با توزیع نرمال در سی‌پلاس‌پلاس خیلی کنده. در مقابل اگر مشخصهٔ آماری براتون مهم نیست می‌تونید از توابع سادهٔ rand استفاده کنید که از سخت‌افزار هم برای تولید عدد تصادفی کمک می‌گیرند: cat /dev/urandom | hexdump سرعت تولید عدد تصادفی به این روش خیلی بالاست اما آشفتگی لازم برای رمزنگاری رو نداره. اگه کاربرد خیلی جدی هست باید از randomبه‌جاش استفاده کنید که کندتره. توابع استاندارد هم از همین‌ها استفاده می‌کنند.
×
×
  • جدید...