PDA

View Full Version : گفتگو: راه های افزایش سرعت کامپایل



UfnCod3r
یک شنبه 24 آذر 1392, 11:08 صبح
شاید برای خیلی ها سرعت کامپایل اهمیتی نداشته باشه .:لبخندساده:
ولی زمانی که بخواین ی چیز درست حسابی بنویسید دیگه انقدری کد هست که هردفعه کامپایل کردنش
عذابتون بده .:عصبانی++:


- سسیتم رو ارتقا بدین:تشویق:


- از کامپایلر های بروز استفاده کنید:تشویق:
از GCC, MSVC استفاده کنید. هرچی نسخه جدیدتر بهتر
اونایی که از توربو سی و امثالش استفاده می کنن هین الان با برنامه نویسی خداحافظی کنند.


- تا اونجا که می تونید از پیش پردازنده ها استفاده نکنید:تشویق:
برای اعداد و ... ثابت از عوض استفاده از define# از متغیر static ,const استفاده کنید.

#define PI 3.141592
//////////////////////////////
const float PI = 3.141592;

اینطوری از Static Linkage استفاده میشه و روند کامپایل و بهینه سازی هم سریع تر انجام میشه.
عوض توابع پیشپردازنده ای از توابع inline استفاده کنید

#define max(a, b) a > b ? a : b
///////////////////////////////////////////
inline int max(int a, int b) { return a > b ? a : b; }
template <typename T> T max(T a, T b){ return a > b ? a : b; }


فقط سرفایل هایی که لازم هست رو اینکلود کنید :تشویق:

تا جایی که می توانید از Forward Declaration استفاده کنید تا نیازی به اینکلود نباشه.:تشویق:

در سرفایل ها (h.) فقط تعریف ها رو بنویسد و کدهای اصلی رو در فایل منبع (cpp.):تشویق:

-از یک فضای نام استفاده کنید. :تشویق:
مسلما" برنامه یا کتاب خانه شما ی اسمی داره. عوض طولانی کردن نام کلاس یا توابع و .. از فضای نام استفاده کنید.


class P3DVector {};
class P3DMatix{};
class P3DCanvas
{
P3DMatrix a, b, c;
P3DVector size, penPos;
};
void Paint3DMatrixMul(P3DMatrix& a, P3DMatrix& b, P3DMatrix& out);

////////////////////////////////////////////////////////////////////

namespace P3D
{
class Matrix {};
class Vector {};

class Canvas
{
Matrix a, b, c;
Vector size, penPos;
};

void MatrixMul(Matrix& a, Matrix& b, Matrix& out);
};


وقتی در فضای نام هستید توابع گلوبال رو با :: صدا بزنید.:تشویق:
اینطوری هم مفهوم کد ها کمی بالاتر میره هم کامپایلر می دونه که داخل این فضای نام رو نگرده .

void P3DMyFunc(int a)
{
pintf("myFunc %d", a);
//...
};

//////////////////////////////////////

namespace P3D
{
void MyFunc(int a)
{
::pintf("myFunc %d", a);
//...
}
};




استفاده از pragme one# عوض
ifndef xxxx#
define xxxx#
endiF#‎
برای یک بار اینکلود شدن هدر ها.:تشویق:

البته این pragme one# فقط در VC موجوده .:شیطان:


شاید چیزای دیگه هم باشه که من نمی دونم و شما می دونید
فعلا خدافظ:چشمک::بوس: