نمایش نتایج 1 تا 24 از 24

نام تاپیک: سرعت کامپایلر C++‎ builder یا visual C++‎ ؟؟؟

  1. #1
    کاربر تازه وارد آواتار (هیچکس)
    تاریخ عضویت
    شهریور 1387
    محل زندگی
    ( صفر و یک )
    پست
    60

    Question سرعت کامپایلر C++‎ builder یا visual C++‎ ؟؟؟

    سلام.
    می خواستم بدونم سرعت زمان اجرای یک برنامه با کامپایلر C++‎builder بالاتره یا visual C++‎
    اگه C++‎builder ، چرا اکثر بازی هایی که برای ویندوز می نویسند با visual C++‎ (win32) نوشته میشن ؟؟؟

    ممنون.

  2. #2
    منتظر تایید آدرس ایمیل
    تاریخ عضویت
    اسفند 1387
    پست
    142

    نقل قول: سرعت کامپایلر C++‎ builder یا visual C++‎ ؟؟؟

    سلام.من تاپیکتو موقعی که زده بودی دیدم اما گفتم بزاریم بزرگتر جواب بدن ما یاد بگیریم،اما گویا بزرگترا این ورا سبز نمیشن.تاجایی که من می دونم کدای ترجمه شده vC++‎ خالص تر بوده و کداش سریع تر اجرا میشن.اما سرعت کامپایلر بورلند بیشک بیش تر از کامپایلر vC++‎ میباشد.

  3. #3

    نقل قول: سرعت کامپایلر C++‎ builder یا visual C++‎ ؟؟؟

    راستش همینجوری نمیشه به این پرسش پاسخ داد. من سعی می کنم که در چند روز آینده تست هایی رو در این رابطه انجام بدم و نتیجه رو در همینجا قرار بدم.

  4. #4
    کاربر دائمی آواتار Ananas
    تاریخ عضویت
    آبان 1390
    محل زندگی
    طول 50 و عرض 34 درجه
    سن
    36
    پست
    894

    نقل قول: سرعت کامپایلر C++‎ builder یا visual C++‎ ؟؟؟

    اما سرعت کامپایلر بورلند بیشک بیش تر از کامپایلر vC++‎‎ میباشد.
    منظورت سرعت کامپایل کردنه یا سرعت اجرای برنامه ی کامپایل شده؟

  5. #5

    نقل قول: سرعت کامپایلر C++‎ builder یا visual C++‎ ؟؟؟

    نقل قول نوشته شده توسط (هیچکس) مشاهده تاپیک
    سلام.
    می خواستم بدونم سرعت زمان اجرای یک برنامه با کامپایلر C++‎builder بالاتره یا visual C++‎
    اگه C++‎builder ، چرا اکثر بازی هایی که برای ویندوز می نویسند با visual C++‎ (win32) نوشته میشن ؟؟؟

    ممنون.
    درود به شما دوست عزیز

    اگه نظر منو بخوای(تست نکردم اما از برنامه نویس های زیادی شنیدم) سرعت visual C++‎‎ (win32) بیشتره.

    اینم نمای کلی از این دوزبان+دلفی

    خصوصیات فایلهای اجرایی در کامپایلرهای مختلف
    اکثر کامپایلرهای سطح بالا ابتدا کدهای نوشته شده را به زبانی سطح پایین ترجمه کرده و سپس آن
    را کامپایل میکنند.این کار بیشتر به دلیل کاهش پیچیدگی های موجود در زبانهای سطح بالا صورت
    میگیرد در حقیقت بار کامپایل نهایی را کاهش میدهد.
    به عنوان مثال زبان MSVC++‎ متکی بر کامپایلر Macro Assembler است حال آنکه زبان C++‎ Builder متکی بر کامپایلر Turbo Assembler است.

    MSVC++‎
    فایل های اجرایی تولید شده توسط MSVC++‎ بطور کامل به زبان ماشین ترجمه میشوند و اسامی و برچسب ها و سایر راهنماها در فایل اجرایی حذف شده و قابل دسترسی نیستند.
    معمولاً منابع(Resource) فایلهای اجرایی تولید شده،منابع استاندارد از قبیل Dialog,Bitmapو... هستند
    فایل های اجرای تولید شده در VC++‎ از سرعت بالایی برخوردار هستند.به همین دلیل برای نوشتن درایورهای سخت افزاری و برنامه هایی که نیاز به سرعت بالا دارند از آن استفاده میشود.


    C++‎ Builder,Delphi

    فایلهای اجرایی تولید شده توسط این زبانها،تقریباً خصوصیات مشترکی دارند.ازجمله اینکه اسامی کلاس هاو اشیاء موجود در برنامه در فایل اجرایی نهایی نیز وجود دارند که این امر باعث خوانایی بیشتر فایلهای اجرایی آنها شده و در نتیجه مراحل DeCompile شدن آنها به سادگی صورت میگیرد.
    فایلهای اجرایی تولید شده نیاز به فایل های جانبی کمتری دارند زیرا اطلاعات و زیر برنامه های لازم معمولاً بصورت Static به فایل اجرایی پیوند زده میشود به همین دلیل فایلهای اجرایی تولید شده توسط این زبان
    از حجم بالایی برخوردار هستند.
    با این وجود به علت اینکه کدها به زبان ماشین ترجمه میشوند،فایلهای کامپایل شده توسط آنها از سرعت نسبتاً خوبی برخوردار هستند.

    منبع: کتاب تکنیک های نفوذ به نرم افزار
    تالیف: امید غلامی و بهزاد لاجوردی
    Everything that has a beginning has an end. ... The End?



  6. #6

    نقل قول: سرعت کامپایلر C++‎ builder یا visual C++‎ ؟؟؟

    فایلهای اجرایی تولید شده نیاز به فایل های جانبی کمتری دارند زیرا اطلاعات و زیر برنامه های لازم معمولاً بصورت Static به فایل اجرایی پیوند زده میشود به همین دلیل فایلهای اجرایی تولید شده توسط این زبان
    از حجم بالایی برخوردار هستند.
    در VC هم می توانیم این حالت را داشته باشیم. به نظر می آید که این کتاب کمی قدیمی باشد و دارای اشکالاتی باشد!

  7. #7

    نقل قول: سرعت کامپایلر C++‎ builder یا visual C++‎ ؟؟؟

    دوباره درود

    چرا اکثر بازی هایی که برای ویندوز می نویسند با visual C++‎‎ (win32) نوشته میشن ؟؟؟
    به نظر من چون اگه در محصولات مایکروسافت تغییری ایجاد بشه حتماً VC هم با اون سازگار میشه(خیلی سریع) اماCB اینطور نیست و یه پله عقبه
    برای این کسانی که مثلاً بازی سازی میکنن اگه با ایجاد تغییر بخوان منتظر سازگار شدن CB باشن پولاشون...

    همون طور که دلفی پریزم همیشه از سی شارپ عقب تره و بروز نیست.
    Everything that has a beginning has an end. ... The End?



  8. #8

    نقل قول: سرعت کامپایلر C++‎‎ builder یا visual C++‎‎ ؟؟؟

    به نظر من چون اگه در محصولات مایکروسافت تغییری ایجاد بشه حتماً VC هم با اون سازگار میشه(خیلی سریع) اماCB اینطور نیست و یه پله عقبه
    برای این کسانی که مثلاً بازی سازی میکنن اگه با ایجاد تغییر بخوان منتظر سازگار شدن CB باشن پولاشون...
    با عرض شرمندگی باید بگم که هیچ ربطی نداره. اتفاقاً باید بگم که پیشرفت C++‎‎‎‎‎‎‎‎‎‎‎‎‎ Builder بسیار سریع صورت می گیره! تقریباً هر چیزی که به دلفی اضافه میشه به سرعت به C++‎‎‎‎‎‎‎‎‎‎‎‎‎ Builder هم اضافه میشه. به عنوان یک مثال باید بگویم که شما با C++‎‎‎‎‎‎‎‎‎‎‎‎‎ Builder میتوانید برای OSX هم برنامه بنویسید ولی با VC++‎‎‎‎‎‎‎‎‎‎‎‎‎ نمیشه. از طرفی هم C++‎‎‎‎‎‎‎‎‎‎‎‎‎ Builder از VC++‎‎‎‎‎‎‎‎‎‎‎‎‎ تبعیت نمیکنه که بخواد از اون الگو بگیره. به عنوان مثال C++‎‎‎‎‎‎‎‎‎‎‎‎‎ Builder ابزاری با نام DataSnap داره و از اون برای ساخت برنامه های سازمانی استفاده میشه در صورتی که شما ابزار مشابهی را با این قابلیت ها و راحتی در VC++‎‎‎‎‎‎‎‎‎‎‎‎‎ نخواهید دید. همچنین شما به صورت مستقیم می توانید از کدهای دلفی در C++‎‎‎‎‎‎‎‎‎‎‎‎‎ Builder استفاده کنید. این فقط یکسری مثال کوچک بود و می توان صدها مورد دیگر رو هم نام برد که توضیح در رابطه همه آنها از حوصله این بحث خارج است.

    همون طور که دلفی پریزم همیشه از سی شارپ عقب تره و بروز نیست.
    کی گفته؟ اصلاً هم اینطور نیست. دلفی پریسم دقیقاً قابلیت های C#‎‎‎‎‎‎‎‎‎‎‎‎‎‎ رو داره(به غیر از یک مورد که در این زمان تقریباً دیگه بهش نیازی نیست) و یکسری امکانات اضافه تر هم داره!
    به عنوان مثال:
    - با دلفی پریسم حتی می توانید برنامه های مبتنی بر جاوا هم بنویسید برای کسب اطلاعات بیشتر می توانید عبارت Cooper را سرچ کنید.
    - توانایی استفاده از کدهای C#‎‎‎‎‎‎‎‎‎‎‎‎‎‎ در دلفی پریسم
    - قابلیت Fix-It و Spell checking به صورت بسیار هوشمند
    - برنامه نویسی موازی که البته نسخه های جدید تر C#‎‎‎‎‎‎‎‎‎‎‎‎‎‎ هم دارند.
    - دارا بودن یک ابزار Oxfuscator
    - و ... .

    همچنین باید بگویم که کامپایلر Delphi Prism از کامپایلر C#‎‎‎‎‎‎‎‎‎‎‎‎‎ کدهای نهایی بهینه تری را تولید می کند. شاید باور نکنید، ولی من طی تست هایی که انجام داده ام در این مورد به این نتیجه قطعی دست یافته ام.
    در هر حال میتوان گفت که Delphi Prism اصلاً از C#‎‎‎‎‎‎‎‎‎‎‎‎‎‎ عقبتر نیست! اون که همیشه از دنیای دات نت عقب می افتاد Delphi.Net بود و نه Delphi Prism!
    این را هم باید بگویم که Delphi.Net مبتنی بر راه حل (Solution) بود که کلاً منسوخ شد ولی Delphi Prism مبتنی بر تکنولوژِی است و به خاطر همین سیاست از تکنولوژی های روز دات نت به هیچ عنوان عقب نمی افتد بلکه در برخی از موارد حتی جلوتر از آن حرکت می کند.

    دوست عزیزم، خواهش می کنم که اگر در رابطه با موضوعی اطلاعات کافی ندارید چیزی نگویید چون این کار باعث گمراهی بسیاری از برنامه نویسان مبتدی خواهد شد.

    کدای ترجمه شده vC++‎‎‎‎‎‎ خالص تر بوده و کداش سریع تر اجرا میشن.
    بعید میدونم که همیشه خالص تر بودن کدها باعث افزایش سرعت اجرا بشه. به عنوان یک مثال قابل فهم جستجوی خطی و باینری را در مورد یک آرایه مرتب شده در نظر بگیرید. ار لحاظ کلی برنامه ای که از جستجوی خطی استفاده می کند کم حجم تر است و کدهای نهایی خالص تری خواهد داشت ولی آیا می توان گفت که عملیات جستجو را نسبت به روش باینری سریع تر انجام میدهد؟!!!
    در حالت کلی کامپایلر های مختلف هم سعی می کنند که کدهای بهینه تری را تولید کنند و این دلیل نمیشه که اگه کامپایلری کد های خالص تری تولید کنه برنامه تولید شده سریعتر اجرا بشه! به نظر من خالص تر بودن کدها با سرعت اجرا ارتباط بسیار محکمی نداره و به عبارتی در کنار خالص بودن کدهای نهایی پارامتر بهینه سازی توسط کامپایلر هم بسیار مهم و حائز اهمیت است.

    و اما، در مورد پست 3 هم به محض اینکه یه فرصت چند ساعته پیدا کنم آزمایشاتی را انجام خواهم داد و نتایجش را قرار خواهم داد.

    یا حق...
    آخرین ویرایش به وسیله BORHAN TEC : دوشنبه 04 اردیبهشت 1391 در 17:53 عصر دلیل: کامل کردن جواب

  9. #9

    نقل قول: سرعت کامپایلر C++‎ builder یا visual C++‎ ؟؟؟

    همچنین باید بگویم که کامپایلر Delphi Prism از کامپایلر C#‎‎‎‎‎‎‎‎‎‎‎‎‎‎ کدهای نهایی بهینه تری را تولید می کند. شاید باور نکنید، ولی من طی تست هایی که انجام داده ام در این مورد به این نتیجه قطعی دست یافته ام.
    در هر حال میتوان گفت که Delphi Prism اصلاً از C#‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎ عقبتر نیست! اون که همیشه از دنیای دات نت عقب می افتاد Delphi.Net بود و نه Delphi Prism!
    این را هم باید بگویم که Delphi.Net مبتنی بر راه حل (Solution) بود که کلاً منسوخ شد ولی Delphi Prism مبتنی بر تکنولوژِی است و به خاطر همین سیاست از تکنولوژی های روز دات نت به هیچ عنوان عقب نمی افتد بلکه در برخی از موارد حتی جلوتر از آن حرکت می کند.
    اینو نمیدونستم شرمنده به بیراهه کشیدم
    بابت این اطلاعات بسیار ممنون
    Everything that has a beginning has an end. ... The End?



  10. #10

    نقل قول: سرعت کامپایلر C++‎ builder یا visual C++‎ ؟؟؟

    سلام دوستان بااین همه؟
    چرا اکثر بازی هایی که برای ویندوز می نویسند با visual C++‎‎ (win32) نوشته میشن ؟؟؟
    اگه با C++‎‎‎‎‎‎‎‎‎‎‎‎‎‎ Builderمیشه چرا این کارو نمیکنن اگه شده درصورت امکان اون برنامه رو ذکرکنید.
    متشکر

  11. #11

    نقل قول: سرعت کامپایلر C++‎‎ builder یا visual C++‎‎ ؟؟؟

    فکر نکنم منبعی باشه که بشه فهمید کدوم برنامه با چی نوشته شده باید خودت تست کنی
    برای مثال برنامه AVG PC Tuneup 2011 با سی بیلدر نوشته شده که همراه آنتی ویروس avg عرضه میشه
    شما با برنامه PEID میتونی نرم افزارهارو تست کنی تا از زبان برنامه نویسی شان مطلع بشی
    Everything that has a beginning has an end. ... The End?



  12. #12

    نقل قول: سرعت کامپایلر C++‎ builder یا visual C++‎ ؟؟؟

    اگه با C++‎‎‎‎‎‎‎‎‎‎‎‎‎‎‎ Builderمیشه چرا این کارو نمیکنن اگه شده درصورت امکان اون برنامه رو ذکرکنید.
    بیشتر شرکتها علاقه ندارند که بگویند نرم افزاران را با چه چیزی نوشته اند ولی باید بگویم که امروزه نرم افزار های بسیار معروفی را با C++‎ Builder نوشته اند که در میان آنها هم میتوان نرم افزارهای مربوط به کارهای گرافیکی را هم مشاهده کرد که لیست مربوط به آنها را می توان در سایت Embarcadero مشاهده کرد.

  13. #13
    کاربر دائمی آواتار Ananas
    تاریخ عضویت
    آبان 1390
    محل زندگی
    طول 50 و عرض 34 درجه
    سن
    36
    پست
    894

    نقل قول: سرعت کامپایلر C++‎ builder یا visual C++‎ ؟؟؟

    بالا خره سرعت تو کدوم بیشتره؟ (اگه به برنامه فرق میکنه مشخصا برای کارای گرافیکی و بازی و دایرکت ایکس یا اپن جی ال منظورم هست)
    من یکی دوتا تست کوچیک انجام دادم سرعت دلفی بیشتر از این دوتاست و سرعت vs از C++‎builder کمتره.یعنی هرچی نزدیکتر به دلفی بوده سرعتش بیشتر شده البته اختلاف خیلی جزئی مثلا 1.6 تا 1.8 .من ضرب ماتریس ها رو امتحان کردم. ولی هنوز نمایش تصویر و تعداد فریم بر ثانیه رو تست نکردم. اگه کسی چیزی امتحان کرده لطفا بگه.

  14. #14
    کاربر دائمی آواتار Ananas
    تاریخ عضویت
    آبان 1390
    محل زندگی
    طول 50 و عرض 34 درجه
    سن
    36
    پست
    894

    نقل قول: سرعت کامپایلر C++‎ builder یا visual C++‎ ؟؟؟

    خوب کسی جواب نمیده؟
    این یه تسته که تو C++‎‎builer نوشتم و برای vs یکمی تفاوت داره در حد یکی دو خط مثلا برای "MHD" یه L به اولش اضافه کردم و یا تابع pow10 رو به شکل pow(10, ...)o نوشتم چون ارور میداد وگرنه بقیش مثل هم هست. سرعتشون تقریبا یکیه نمیشه گفت کدوم سریع تره. برنامه با Direct3D9 هست و یک قوری زرد با بکگراند آبی رو نمایش میده که تو مرکز مختصات داره دور خودش می چرخه. از سیستم نورافشانی دایرکت تریدی استفاده شده.
    به هر حال وقتی برنامه اجرا شد پنجره تمام صفحه میشه بعد با alt + f4 برنامه رو ببندید، پنجره برنامه بسته میشه یم پنجره پیغام میاد که یک لیستی از فریم بر ثانیه که تو 25 فریم آخر ذخیره شده رو نمایش میده که اولین عدد از تقسیم کل فریم ها بر زمان کل نمایش بدست میاد و بقیشون (24 تای بعد) هم برای هر فریم جداگانه حساب شده. عدد اول تقریبا به شکل میانگین هست.
    کد تو C++‎‎builder:

    /*****************
    * *
    * MHD_1391 *
    * *
    *****************/

    #include <windows.h>

    #pragma hdrstop

    #include <d3d9.h>
    #include <d3dx9.h>
    #pragma comment(lib, "d3d9.lib")
    #pragma comment(lib, "d3dx9.lib")

    #include <tchar.h>

    IDirect3D9 *xd3d;
    IDirect3DDevice9 *xdev;
    D3DCAPS9 xcaps;
    D3DVIEWPORT9 xvp;
    D3DPRESENT_PARAMETERS xpp;
    D3DLIGHT9 xlight;
    D3DMATERIAL9 xmaterial;
    ID3DXMesh *teaput;
    HWND DXhwnd = NULL;
    //------------------------------------------------------------------------------
    #define FPS_LIST_COUNT 25
    double CurrentTime, StartTime;
    int FPS_Index = -1;
    double FPSs[FPS_LIST_COUNT];
    int FrameCount = 0;

    double GetNow()
    {
    LARGE_INTEGER lic, lif;
    QueryPerformanceCounter(&lic);
    QueryPerformanceFrequency(&lif);
    return (double)lic.QuadPart / (double)lif.QuadPart;
    }

    void UpdateFPS()
    {
    FPS_Index++;
    if (FPS_Index >= FPS_LIST_COUNT)
    {
    FPS_Index = 0;
    }
    FPSs[FPS_Index] = 1.0L / (GetNow() - CurrentTime);
    }

    char * DoubleToStr(const double d)
    {
    char * s = new char[20];
    if (d == 0.0L)
    {
    for (int i = 0; i < 20; i++) {
    s[i] = '0';
    }
    s[19] = NULL;
    return s;
    }
    int exponent = (int)log10(fabsl(d));
    double num = fabsl(d) / pow10l((double)exponent);
    if (num >= 1.0L)
    {
    num /= 10.0L;
    }
    else
    exponent--;
    num += 0.0000000000001L;
    int x;
    int i = 0;
    if (d < 0.0L)
    {
    s[0] = '-';
    }
    else
    {
    s[0] = '+';
    }
    s[2] = '.';
    while (i < 10)
    {
    i++;
    if (i == 2)
    {
    i++;
    }
    num *= 10.0L;
    x = num;
    s[i] = '0' + x;
    num = num - x;
    }
    if (exponent != 0)
    {
    i++;
    s[i] = 'e';
    if (exponent < 0)
    {
    i++;
    s[i] = '-';
    exponent = abs(exponent);
    }
    int expon_10 = log10(exponent);
    expon_10 = pow10(expon_10);
    while (expon_10 > 0)
    {
    i++;
    s[i] = '0' + (exponent / expon_10);
    expon_10 /= 10;
    }
    }
    s[i + 1] = NULL;
    return s;
    }

    void straddstr(char **c1, const char *c2)
    {
    int i = strlen(*c1),
    j = strlen(c2);

    char *c3 = (char *)malloc(i + j + 1);
    memcpy(c3, *c1, i);
    memcpy(c3 + i, c2, j);
    c3[i + j] = NULL;
    *c1 = c3;
    }

    void MessageFPS()
    {
    FPSs[0] = (double)FrameCount / (GetNow() - StartTime);
    char nextline[3] = {char(13), char(10), 0};
    char *s = "";
    char *num;
    for (int i = 0; i < FPS_LIST_COUNT; i++)
    {
    num = DoubleToStr(FPSs[i]);
    straddstr(&num, nextline);
    if (i == 0)
    {
    straddstr(&num, nextline);
    }
    straddstr(&s, num);
    }

    MessageBox(0, s, "MHD_1391", MB_OK);
    }

    //------------------------------------------------------------------------------
    tagPOINT GetScreenSize()
    {
    tagPOINT p;
    tagRECT r;
    GetWindowRect(GetDesktopWindow(), &r);
    p.x = r.right;
    p.y = r.bottom;
    return p;
    }
    tagPOINT desktop_size = GetScreenSize();

    HRESULT DXCreateDevice()
    {
    xd3d = Direct3DCreate9(D3D_SDK_VERSION);
    xd3d->GetDeviceCaps(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, &xcaps);
    DWORD vp;
    if (xcaps.Caps & D3DDEVCAPS_HWTRANSFORMANDLIGHT)
    {
    vp = D3DCREATE_HARDWARE_VERTEXPROCESSING;
    }
    else
    {
    vp = D3DCREATE_SOFTWARE_VERTEXPROCESSING;
    }
    xpp.BackBufferWidth = desktop_size.x;
    xpp.BackBufferHeight = desktop_size.y;
    xpp.BackBufferFormat = D3DFMT_A8R8G8B8;
    xpp.BackBufferCount = 0;
    xpp.MultiSampleType = D3DMULTISAMPLE_NONE;
    xpp.MultiSampleQuality = 0;
    xpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
    xpp.hDeviceWindow = DXhwnd;
    xpp.Windowed = true;
    xpp.EnableAutoDepthStencil = true;
    xpp.AutoDepthStencilFormat = D3DFMT_D24S8;
    xpp.Flags = 0;
    xpp.FullScreen_RefreshRateInHz = D3DPRESENT_RATE_DEFAULT;
    xpp.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE;
    return xd3d->CreateDevice(
    D3DADAPTER_DEFAULT,
    D3DDEVTYPE_HAL,
    DXhwnd,
    D3DCREATE_FPU_PRESERVE | vp,
    &xpp,
    &xdev
    );
    }

    HRESULT DXSetup()
    {
    StartTime = GetNow();
    HRESULT out = D3DXCreateTeapot(xdev, &teaput, NULL);
    if (FAILED(out)) return out;
    //----------------------
    xvp.X = 0;
    xvp.Y = 0;
    xvp.Width = desktop_size.x;
    xvp.Height = desktop_size.y;
    xvp.MinZ = 0.0f;
    xvp.MaxZ = 1.0f;
    xdev->SetViewport(&xvp);
    //----------------------
    xlight.Type = D3DLIGHT_POINT;
    xlight.Diffuse = D3DXCOLOR(1.0, 1.0, 1.0f, 1.0f);
    xlight.Specular = xlight.Diffuse;
    xlight.Ambient = xlight.Diffuse;
    xlight.Range = 1000.0f;
    xlight.Position = D3DXVECTOR3(10.0f, 10.0f, 10.0f);
    xlight.Attenuation0 = 1.0f;
    xlight.Attenuation1 = 0.0f;
    xlight.Attenuation2 = 0.0f;
    xdev->SetLight(0, &xlight);
    xdev->LightEnable(0, true);
    //----------------------
    xmaterial.Diffuse = D3DXCOLOR(1.0, 1.0, 0.0f, 1.0f);
    xmaterial.Ambient = D3DXCOLOR(0.0f, 0.0f, 0.0f, 1.0f);
    xmaterial.Specular = D3DXCOLOR(1.0, 1.0, 1.0f, 1.0f);
    xmaterial.Emissive = D3DXCOLOR(0.0f, 0.0f, 0.0f, 1.0f);
    xmaterial.Power = 10.0f;
    xdev->SetMaterial(&xmaterial);
    //----------------------
    xdev->SetRenderState(D3DRS_ZENABLE, true);
    xdev->SetRenderState(D3DRS_LIGHTING, true);
    xdev->SetRenderState(D3DRS_FILLMODE, D3DFILL_SOLID);
    xdev->SetRenderState(D3DRS_SHADEMODE, D3DSHADE_GOURAUD);
    xdev->SetRenderState(D3DRS_ZWRITEENABLE, true);
    xdev->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE);
    return 0;
    }

    void DXDisplay()
    {
    FrameCount++;
    double now_ = GetNow();
    xdev->Clear(
    0,
    NULL,
    D3DCLEAR_TARGET |
    D3DCLEAR_STENCIL |
    D3DCLEAR_ZBUFFER,
    0xff0000ff,
    1.0,
    0);
    //------------------------------------------------------------------------------
    xdev->BeginScene();
    //-------------------------------------------
    D3DXMATRIX m, rx, rz;
    D3DXMatrixIdentity(&m);
    xdev->SetTransform(D3DTS_WORLD, &m);
    //-------------------------------------------
    D3DXMatrixPerspectiveFovRH(
    &m,
    M_PI / 4.0f,
    (float)xvp.Width / (float)xvp.Height,
    1.0f,
    1000.0f
    );
    xdev->SetTransform(D3DTS_PROJECTION, &m);
    //-------------------------------------------
    D3DXMatrixRotationX(&rx, M_PI / 4.0f);
    D3DXMatrixRotationZ(&rz, M_PI / 4.0f);
    m = rx * rz;
    D3DXMatrixTranslation(&rx, 0.0f, 0.0f, 5.0f);
    m = rx * m;
    D3DXMatrixInverse(&m, NULL, &m);
    xdev->SetTransform(D3DTS_VIEW, &m);
    //-------------------------------------------
    D3DXMatrixRotationX(&rx, M_PI / 2.0f);
    D3DXMatrixRotationZ(&rz, 10.0f * now_ / M_PI);
    m = rx * rz;
    xdev->SetTransform(D3DTS_WORLD, &m);
    teaput->DrawSubset(0);
    xdev->EndScene();
    //------------------------------------------------------------------------------
    xdev->Present(NULL, NULL, NULL, NULL);
    }

    //------------------------------------------------------------------------------

    LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
    {
    switch(msg)
    {
    case WM_CLOSE:
    DestroyWindow(hwnd);
    return 0;
    case WM_DESTROY:
    PostQuitMessage(0);
    return 0;
    default:
    return DefWindowProc(hwnd,msg,wParam,lParam);
    }
    }

    void WindowsFunctions()
    {
    //------------------------------------------------------------------------------
    WNDCLASSEX wcx;
    wcx.cbSize = sizeof(WNDCLASSEX);
    wcx.style = 0;
    wcx.lpfnWndProc = WndProc;
    wcx.cbClsExtra = 0;
    wcx.cbWndExtra = 0;
    wcx.hInstance = GetModuleHandle(0);
    wcx.hIcon = LoadIcon(0,IDI_APPLICATION);
    wcx.hCursor = LoadCursor(0,IDC_ARROW);
    wcx.hbrBackground = (HBRUSH)(COLOR_WINDOWFRAME);
    wcx.lpszMenuName = 0;
    wcx.lpszClassName = "classname";
    wcx.hIconSm = LoadIcon(0,IDI_APPLICATION);
    RegisterClassEx(&wcx);
    //------------------------------------------------------------------------------
    tagRECT desktop_rect;
    GetWindowRect(GetDesktopWindow(), &desktop_rect);
    HWND hwnd = CreateWindowEx
    (
    0 ,// dwExStyle
    "classname" ,// lpClassName
    "title" ,// lpWindowName
    WS_POPUP ,// dwStyle
    0 ,// x
    0 ,// y
    desktop_rect.right ,//CW_USEDEFAULT ,// nWidth
    desktop_rect.bottom ,// nHeight
    0 ,// hWndParent
    0 ,// hMenu
    0 ,// hInstance
    0 // lpParam
    );
    ShowWindow(hwnd, SW_SHOWMAXIMIZED);
    UpdateWindow(hwnd);
    DXhwnd = hwnd;
    }

    WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
    {
    DoubleToStr(100.0);
    WindowsFunctions();
    if FAILED(DXCreateDevice())
    MessageBox(NULL, "FAILED CreateDevice!", "MHD_1391", MB_OK);
    if FAILED(DXSetup())
    MessageBox(NULL, "FAILED Setup!", "MHD_1391", MB_OK);
    //------------------------------------------------------------------------------
    MSG Msg;
    while (true)
    {
    if (PeekMessage(&Msg, 0, 0, 0, PM_REMOVE) > 0)
    {
    if (Msg.message == WM_QUIT) {
    break;
    }
    TranslateMessage(&Msg);
    DispatchMessage(&Msg);
    }
    CurrentTime = GetNow();
    DXDisplay();
    UpdateFPS();
    }
    teaput->Release();
    xdev->Release();
    xd3d->Release();
    MessageFPS();
    //------------------------------------------------------------------------------
    return 0;
    }


    کد برای VisualStudio:

    /*****************
    * *
    * MHD_1391 *
    * *
    *****************/

    #define _USE_MATH_DEFINES
    #include <math.h>
    #include <windows.h>
    #include <d3d9.h>
    #include <d3dx9.h>

    #pragma hdrstop

    #pragma comment(lib, "d3d9.lib")
    #pragma comment(lib, "d3dx9.lib")

    #include <tchar.h>

    IDirect3D9 *xd3d;
    IDirect3DDevice9 *xdev;
    D3DCAPS9 xcaps;
    D3DVIEWPORT9 xvp;
    D3DPRESENT_PARAMETERS xpp;
    D3DLIGHT9 xlight;
    D3DMATERIAL9 xmaterial;
    ID3DXMesh *teaput;
    HWND DXhwnd = NULL;
    //------------------------------------------------------------------------------
    #define FPS_LIST_COUNT 25
    double CurrentTime, StartTime;
    int FPS_Index = -1;
    double FPSs[FPS_LIST_COUNT];
    int FrameCount = 0;

    double GetNow()
    {
    LARGE_INTEGER lic, lif;
    QueryPerformanceCounter(&lic);
    QueryPerformanceFrequency(&lif);
    return (double)lic.QuadPart / (double)lif.QuadPart;
    }

    void UpdateFPS()
    {
    FPS_Index++;
    if (FPS_Index >= FPS_LIST_COUNT)
    {
    FPS_Index = 0;
    }
    FPSs[FPS_Index] = 1.0L / (GetNow() - CurrentTime);
    }

    char * DoubleToStr(const double d)
    {
    char * s = new char[20];
    if (d == 0.0L)
    {
    for (int i = 0; i < 20; i++) {
    s[i] = '0';
    }
    s[19] = NULL;
    return s;
    }
    int exponent = (int)log10(fabsl(d));
    double num = fabsl(d) / pow(10, (double)exponent);
    if (num >= 1.0L)
    {
    num /= 10.0L;
    }
    else
    exponent--;
    num += 0.0000000000001L;
    int x;
    int i = 0;
    if (d < 0.0L)
    {
    s[0] = '-';
    }
    else
    {
    s[0] = '+';
    }
    s[2] = '.';
    while (i < 10)
    {
    i++;
    if (i == 2)
    {
    i++;
    }
    num *= 10.0L;
    x = num;
    s[i] = '0' + x;
    num = num - x;
    }
    if (exponent != 0)
    {
    i++;
    s[i] = 'e';
    if (exponent < 0)
    {
    i++;
    s[i] = '-';
    exponent = abs(exponent);
    }
    int expon_10 = log10((double)exponent);
    expon_10 = pow(10, (double)expon_10);
    while (expon_10 > 0)
    {
    i++;
    s[i] = '0' + (exponent / expon_10);
    expon_10 /= 10;
    }
    }
    s[i + 1] = NULL;
    return s;
    }

    void straddstr(char **c1, const char *c2)
    {
    int i = strlen(*c1),
    j = strlen(c2);

    char *c3 = (char *)malloc(i + j + 1);
    memcpy(c3, *c1, i);
    memcpy(c3 + i, c2, j);
    c3[i + j] = NULL;
    *c1 = c3;
    }

    void MessageFPS()
    {
    FPSs[0] = (double)FrameCount / (GetNow() - StartTime);
    char nextline[3] = {char(13), char(10), 0};
    char *s = "";
    char *num;
    for (int i = 0; i < FPS_LIST_COUNT; i++)
    {
    num = DoubleToStr(FPSs[i]);
    straddstr(&num, nextline);
    if (i == 0)
    {
    straddstr(&num, nextline);
    }
    straddstr(&s, num);
    }

    MessageBoxA(0, s, "MHD_1391", MB_OK);
    }

    //------------------------------------------------------------------------------
    tagPOINT GetScreenSize()
    {
    tagPOINT p;
    tagRECT r;
    GetWindowRect(GetDesktopWindow(), &r);
    p.x = r.right;
    p.y = r.bottom;
    return p;
    }
    tagPOINT desktop_size = GetScreenSize();

    HRESULT DXCreateDevice()
    {
    xd3d = Direct3DCreate9(D3D_SDK_VERSION);
    xd3d->GetDeviceCaps(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, &xcaps);
    DWORD vp;
    if (xcaps.Caps & D3DDEVCAPS_HWTRANSFORMANDLIGHT)
    {
    vp = D3DCREATE_HARDWARE_VERTEXPROCESSING;
    }
    else
    {
    vp = D3DCREATE_SOFTWARE_VERTEXPROCESSING;
    }
    xpp.BackBufferWidth = desktop_size.x;
    xpp.BackBufferHeight = desktop_size.y;
    xpp.BackBufferFormat = D3DFMT_A8R8G8B8;
    xpp.BackBufferCount = 0;
    xpp.MultiSampleType = D3DMULTISAMPLE_NONE;
    xpp.MultiSampleQuality = 0;
    xpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
    xpp.hDeviceWindow = DXhwnd;
    xpp.Windowed = true;
    xpp.EnableAutoDepthStencil = true;
    xpp.AutoDepthStencilFormat = D3DFMT_D24S8;
    xpp.Flags = 0;
    xpp.FullScreen_RefreshRateInHz = D3DPRESENT_RATE_DEFAULT;
    xpp.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE;
    return xd3d->CreateDevice(
    D3DADAPTER_DEFAULT,
    D3DDEVTYPE_HAL,
    DXhwnd,
    D3DCREATE_FPU_PRESERVE | vp,
    &xpp,
    &xdev
    );
    }

    HRESULT DXSetup()
    {
    StartTime = GetNow();
    HRESULT out = D3DXCreateTeapot(xdev, &teaput, NULL);
    if (FAILED(out)) return out;
    //----------------------
    xvp.X = 0;
    xvp.Y = 0;
    xvp.Width = desktop_size.x;
    xvp.Height = desktop_size.y;
    xvp.MinZ = 0.0f;
    xvp.MaxZ = 1.0f;
    xdev->SetViewport(&xvp);
    //----------------------
    xlight.Type = D3DLIGHT_POINT;
    xlight.Diffuse = D3DXCOLOR(1.0, 1.0, 1.0f, 1.0f);
    xlight.Specular = xlight.Diffuse;
    xlight.Ambient = xlight.Diffuse;
    xlight.Range = 1000.0f;
    xlight.Position = D3DXVECTOR3(10.0f, 10.0f, 10.0f);
    xlight.Attenuation0 = 1.0f;
    xlight.Attenuation1 = 0.0f;
    xlight.Attenuation2 = 0.0f;
    xdev->SetLight(0, &xlight);
    xdev->LightEnable(0, true);
    //----------------------
    xmaterial.Diffuse = D3DXCOLOR(1.0, 1.0, 0.0f, 1.0f);
    xmaterial.Ambient = D3DXCOLOR(0.0f, 0.0f, 0.0f, 1.0f);
    xmaterial.Specular = D3DXCOLOR(1.0, 1.0, 1.0f, 1.0f);
    xmaterial.Emissive = D3DXCOLOR(0.0f, 0.0f, 0.0f, 1.0f);
    xmaterial.Power = 10.0f;
    xdev->SetMaterial(&xmaterial);
    //----------------------
    xdev->SetRenderState(D3DRS_ZENABLE, true);
    xdev->SetRenderState(D3DRS_LIGHTING, true);
    xdev->SetRenderState(D3DRS_FILLMODE, D3DFILL_SOLID);
    xdev->SetRenderState(D3DRS_SHADEMODE, D3DSHADE_GOURAUD);
    xdev->SetRenderState(D3DRS_ZWRITEENABLE, true);
    xdev->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE);
    }

    void DXDisplay()
    {
    FrameCount++;
    double now_ = GetNow();
    xdev->Clear(
    0,
    NULL,
    D3DCLEAR_TARGET |
    D3DCLEAR_STENCIL |
    D3DCLEAR_ZBUFFER,
    0xff0000ff,
    1.0,
    0);
    //------------------------------------------------------------------------------
    xdev->BeginScene();
    //-------------------------------------------
    D3DXMATRIX m, rx, rz;
    D3DXMatrixIdentity(&m);
    xdev->SetTransform(D3DTS_WORLD, &m);
    //-------------------------------------------
    D3DXMatrixPerspectiveFovRH(
    &m,
    //M_PI
    3.14159265358979f / 4.0f,
    (float)xvp.Width / (float)xvp.Height,
    1.0f,
    1000.0f
    );
    xdev->SetTransform(D3DTS_PROJECTION, &m);
    //-------------------------------------------
    D3DXMatrixRotationX(&rx, M_PI / 4.0f);
    D3DXMatrixRotationZ(&rz, M_PI / 4.0f);
    m = rx * rz;
    D3DXMatrixTranslation(&rx, 0.0f, 0.0f, 5.0f);
    m = rx * m;
    D3DXMatrixInverse(&m, NULL, &m);
    xdev->SetTransform(D3DTS_VIEW, &m);
    //-------------------------------------------
    D3DXMatrixRotationX(&rx, M_PI / 2.0f);
    D3DXMatrixRotationZ(&rz, 10.0f * now_ / M_PI);
    m = rx * rz;
    xdev->SetTransform(D3DTS_WORLD, &m);
    teaput->DrawSubset(0);
    xdev->EndScene();
    //------------------------------------------------------------------------------
    xdev->Present(NULL, NULL, NULL, NULL);
    }

    //------------------------------------------------------------------------------

    LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
    {
    switch(msg)
    {
    case WM_CLOSE:
    DestroyWindow(hwnd);
    return 0;
    case WM_DESTROY:
    PostQuitMessage(0);
    return 0;
    default:
    return DefWindowProc(hwnd,msg,wParam,lParam);
    }
    }

    void WindowsFunctions()
    {
    //------------------------------------------------------------------------------
    WNDCLASSEX wcx;
    wcx.cbSize = sizeof(WNDCLASSEX);
    wcx.style = 0;
    wcx.lpfnWndProc = WndProc;
    wcx.cbClsExtra = 0;
    wcx.cbWndExtra = 0;
    wcx.hInstance = GetModuleHandle(0);
    wcx.hIcon = LoadIcon(0,IDI_APPLICATION);
    wcx.hCursor = LoadCursor(0,IDC_ARROW);
    wcx.hbrBackground = (HBRUSH)(COLOR_WINDOWFRAME);
    wcx.lpszMenuName = 0;
    wcx.lpszClassName = L"classname";
    wcx.hIconSm = LoadIcon(0,IDI_APPLICATION);
    RegisterClassEx(&wcx);
    //------------------------------------------------------------------------------
    tagRECT desktop_rect;
    GetWindowRect(GetDesktopWindow(), &desktop_rect);
    HWND hwnd = CreateWindowEx
    (
    0 ,// dwExStyle
    L"classname" ,// lpClassName
    L"title" ,// lpWindowName
    WS_POPUP ,// dwStyle
    0 ,// x
    0 ,// y
    desktop_rect.right ,//CW_USEDEFAULT ,// nWidth
    desktop_rect.bottom ,// nHeight
    0 ,// hWndParent
    0 ,// hMenu
    0 ,// hInstance
    0 // lpParam
    );
    ShowWindow(hwnd, SW_SHOWMAXIMIZED);
    UpdateWindow(hwnd);
    DXhwnd = hwnd;
    }

    //WINAPI
    int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)
    {
    DoubleToStr(100.0);
    WindowsFunctions();
    if FAILED(DXCreateDevice())
    MessageBox(NULL, L"FAILED CreateDevice!", L"MHD_1391", MB_OK);
    if FAILED(DXSetup())
    MessageBox(NULL, L"FAILED Setup!", L"MHD_1391", MB_OK);
    //------------------------------------------------------------------------------
    MSG Msg;
    while (true)
    {
    if (PeekMessage(&Msg, 0, 0, 0, PM_REMOVE) > 0)
    {
    if (Msg.message == WM_QUIT) {
    break;
    }
    TranslateMessage(&Msg);
    DispatchMessage(&Msg);
    }
    CurrentTime = GetNow();
    DXDisplay();
    UpdateFPS();
    }
    teaput->Release();
    xdev->Release();
    xd3d->Release();
    MessageFPS();
    //------------------------------------------------------------------------------
    return 0;
    }


    تو سیستم من تقریبا 1140 فریم بر ثانیه نمایش میدن هم با vs هم C++‎builder.

  15. #15
    کاربر دائمی آواتار Hossenbor
    تاریخ عضویت
    بهمن 1387
    محل زندگی
    پارس
    پست
    429

    نقل قول: سرعت کامپایلر C++‎ builder یا visual C++‎ ؟؟؟

    ولی ویژال سی پلاس پلاس تو رابط کاربریش خیلی ضعیفه یا من طرز کار باهاش بلد نیستم یک پسورد جنریتور ساختم بهش گفتم صد هزار پسورد بسازه تو کمتر از یک ثانیه ساخت اما وقتی میخواست به ادیت کنترل اضافه شون کنه 12 ثانیه طول کشید طول پسوردها هم 64 بود و اینو با یک برنامه که حجمش زیاد بود به احتمال زیاد یا با دلفی بود یا سی پلاس پلاس بویلدر ام اف سی که نبود مدت زمانی که طول کشید 4 تا 5 ثانیه بود البته من تقلب کردم ظرفیت بافرمو زیاد کردم و بدون رابط کاربری برنامه من دو میلیون رمز رو با طول 64 توی 5 الی 6 ثانیه توی یک فایل بهم تحویل میداد البته این نکته رو هم بگم تا نامردی نشه من از خط فرمان استفاده کردم اون از رابط کاربری و پروجرس بار و دوتا لیبل که کارشو نشون میداد

  16. #16
    کاربر دائمی آواتار #target
    تاریخ عضویت
    دی 1387
    محل زندگی
    استان گلستان
    پست
    589

    نقل قول: سرعت کامپایلر C++‎ builder یا visual C++‎ ؟؟؟

    C++‎‎Builder برنامه هایی که باهاش مینویسین از کلاس های VCL استفاده میکنین و احتمالا سرعت کمتر میشه (ولی خوب نامحسوسه)! اما اینکه بعضی وقتها میبینی مثلا با Win32 برنامه گرافیکی کند تره این احتمالا دلیل اینه که شما کد استانداردی ننوشتید .
    در C++‎‎Builder همه اشیا برای طراحی در اختیار شماست و فقط شما نقاشی میکنید (برای طراحی محیط) اما با Win32 شما خودتان قدم به قدم کار و انجام میدین . اگر همون کد Win32 رو با کامپایلر بورلند کامپایل کردین سریعتر شد اونوقت !

  17. #17
    کاربر دائمی آواتار Ananas
    تاریخ عضویت
    آبان 1390
    محل زندگی
    طول 50 و عرض 34 درجه
    سن
    36
    پست
    894

    نقل قول: سرعت کامپایلر C++‎ builder یا visual C++‎ ؟؟؟

    نقل قول نوشته شده توسط #target مشاهده تاپیک
    C++‎‎‎‎Builder برنامه هایی که باهاش مینویسین از کلاس های VCL استفاده میکنین و احتمالا سرعت کمتر میشه (ولی خوب نامحسوسه)! اما اینکه بعضی وقتها میبینی مثلا با Win32 برنامه گرافیکی کند تره این احتمالا دلیل اینه که شما کد استانداردی ننوشتید .
    در C++‎‎‎‎Builder همه اشیا برای طراحی در اختیار شماست و فقط شما نقاشی میکنید (برای طراحی محیط) اما با Win32 شما خودتان قدم به قدم کار و انجام میدین . اگر همون کد Win32 رو با کامپایلر بورلند کامپایل کردین سریعتر شد اونوقت !
    به نظرم (مگه کی هستی که نظر میدی؟) مقایسه با کد های مشابه درستر هست و من به شخصه بیشتر مایلم بدونم که اگه برنامه ای رو با C++‎‎‎builder کامپایل کنیم که بشه همون کد رو با کمی تغییر با VisualStudio کامپایل کرد (مثلا نخوایم خیلی از امکانات vcl استفاده کنیم) ، اونوقت سرعت اجرای برنامه تو کدوم بیشتر میشه؟ ضمن اینکه ما تو C++‎‎Builder هم می تونیم برنامه رو به شکل Win32 و بدون استفاده از VCL بنویسیم، همون طور که شما هم فرمودید اونوقت مایلیم که بدونیم سرعت تو کدوم بیشتره. مثل کدی که بنده نوشتم.
    کدی که بنده تو پستای قبل نوشتم بیشتر توابع Direct3D رو فراخونی می کرد که اون هم بیشتر تو dll های دایرکت تری دی هستن و در واقع کدهای دستی که ما نوشتیم خیلی دخیل نیستن که سرعت دو تا کامپایلر رو بخوایم مقایسه کنیم. ولی با این حال تقریبا در مورد استفاده از Direct3D من به جوابم رسیدم و نتیجه گرفتم که سرعتشون تقریبا یکی هست هر چند دلیل اصلی اون شاید استفاده ی دو تا کامپایلر از dll های مشترک باشه. به همین خاطر که تفاوت سرعت وجود نداره یا حداقل کمه ، من برای اینکه بتونم در صورت لزوم از vcl هم استفاده کنم هر چند مختصر ولی بی دردسر، تصمیم گرفتم برنامه هام رو با C++‎‎‎Builder بنویسم.
    بازم اگه کسی برنامه ی مقایسه نوشته لطفا اضافه کنه. ممنون.

  18. #18
    کاربر دائمی آواتار #target
    تاریخ عضویت
    دی 1387
    محل زندگی
    استان گلستان
    پست
    589

    نقل قول: سرعت کامپایلر C++‎‎ builder یا visual C++‎‎ ؟؟؟

    اینطوری نمیشه ی برنامه نوشتو بعد بیای با ی ساعت زمان بگیری کدوم سریعتره
    معمولا باید کدهای ترجمه شده به زمان ماشین دو تابع رو دید
    تا جایی که من بررسی کردم ویژوال استودیو هوشمندتر عمل میکنه . من ی نمونه کدو با هر دو کامپایلر کامپیل کردم و کد اسمبلی رو دیدم که ببینم چطوره
    هر دو کد در حالت Release بدون تغییر در تنظیمات انجام شده
    تابع زیر

    int y()
    {
    int i;
    for (i = 0; i < 10; i++)
    i += 1;
    printf("%d" , i);
    return 0;
    }


    کامپایلر C++‎‎‎‎Builder 2009 کدو به شکل زیر درآورده

    XOR EAX,EAX
    X1 : INC EAX
    INC EAX
    CMP EAX,0A
    JL X1
    PUSH EAX
    PUSH 004020A8 //; |format = "%d"
    CALL <JMP.&CC3290._printf>
    ADD ESP,8
    XOR EAX,EAX
    RETN


    اما ویژوال استودیو 2010 هوشمندانه تر عمل کرده . در کدی که من نوشتم حلقه در نهایت مقدار i رو ده میکنه ویژوال استودیو در کد کامپایل شده حلقه رو اصلا اجرا نمیکنه و مستقیما مقدار ده رو برا پرینت میفرسته

    PUSH 0A //; 0A = 10
    PUSH 004020F4 //; |format = "%d"
    CALL [MSVCR100.printf]
    ADD ESP,8
    XOR EAX,EAX
    RETN

    البته با این وضع باز هم نمیشه تصمیم دقیقی گرفت
    آخرین ویرایش به وسیله #target : سه شنبه 13 تیر 1391 در 14:57 عصر

  19. #19
    کاربر دائمی آواتار Ananas
    تاریخ عضویت
    آبان 1390
    محل زندگی
    طول 50 و عرض 34 درجه
    سن
    36
    پست
    894

    نقل قول: سرعت کامپایلر C++‎ builder یا visual C++‎ ؟؟؟

    ممنون از کدی که نوشتی و مقایه کردی.
    اینطوری نمیشه ی برنامه نوشتو بعد بیای با ی ساعت زمان بگیری کدوم سریعتره
    معمولا باید کدهای ترجمه شده به زمان ماشین دو تابع رو دید
    چرا نمیشه؟ راهش همینه:
    1 - اختلاف زمانی بین شروع و پایان کار.
    2 - تعداد دفعات انجام کار در زمان مشخص.
    هر دو تا میتونه تو یک دوره ی زمانی متوسط (در حد 5 ثانیه) اختلاف سرعت رو به خوبی مشخص کنه.
    سرعت چیه؟
    از نظر فیزیکی جابجایی تقسیم بر زمان. در اینجا به طریق مشابه تعداد فریم تقسیم بر زمان. فریم های بیشتر در زمان کمتر. چیزی که تو برنامه هایی مثل بازی خیلی مهمه و به نمایش روان و نرم کمک میکنه و هم اینکه اجازه میده تا ما جای تعداد بیشتری از فریم ها رو بدیم به محاسبات لازم برای امور دیگه. یعنی اگه میتونیم 100 فریم بر ثانیه نمایش بدیم، میایم 30 فریم نمایش میدیم و زمان اضافی این بین رو صرف کارای دیگه میکنیم.
    اگه اختلاف زمانی اینقدر کوچیک هست که من با دیدن اعداد زمان نتونم تشخیص بدم مطمئنا تو نمایش هم تاثیر خاصی نداره و با اطمینان کامل میشه ازش صرف نظر کرد.

  20. #20
    کاربر دائمی آواتار #target
    تاریخ عضویت
    دی 1387
    محل زندگی
    استان گلستان
    پست
    589

    نقل قول: سرعت کامپایلر C++‎ builder یا visual C++‎ ؟؟؟

    اون درست . اما شما در ویندوز که اجرا میکنید کل سیستم در اختیار شما نیست . در نتیجه ممکنه هر بار ی نتیجه بگیرید (البته اونقدر تفاوت نباید محسوس باشه )
    برای گرفتن زمان با دقت بالاتر میتونید از تابع QueryPerformanceCounter برای گرفتن زمان اجرای کد با دقت بالا (میکروثانیه باید باشه) استفاده کنید

    اگه اختلاف زمانی اینقدر کوچیک هست که من با دیدن اعداد زمان نتونم تشخیص بدم مطمئنا تو نمایش هم تاثیر خاصی نداره و با اطمینان کامل میشه ازش صرف نظر کرد.
    بله درسته . تغییر سرعت ها برای کاربر محسوس نیست و این تفاوت ها هم شاید در حد کمتر از میلی ثانیه باشه

  21. #21
    کاربر دائمی آواتار Ananas
    تاریخ عضویت
    آبان 1390
    محل زندگی
    طول 50 و عرض 34 درجه
    سن
    36
    پست
    894

    نقل قول: سرعت کامپایلر C++‎ builder یا visual C++‎ ؟؟؟

    اما شما در ویندوز که اجرا میکنید کل سیستم در اختیار شما نیست . در نتیجه ممکنه هر بار ی نتیجه بگیرید (البته اونقدر تفاوت نباید محسوس باشه )
    بله همینطوره هر دفعه فرق میکنه اما تفاوت ها حول عدد خاصی میچرخه و اعدادمشابه وقتی دیده میشه نتیجه می گیریم تفاوت سرعت خیلی کمه. البته من موقع گرفتن تست هیچ کار دیگه ای از دستگاه نمیکشم حتی برنامه ی پخش موسیقی رو هم می بندم و برای بهتر مقایسه کردن میشه محیط برنامه نویسی رو هم بست و فقط فایل exe رو از داخل پوشه اجرا کرد. مهم اینه که سعی کنیم هر دوشون در شرایط نسبتا یکسان و روی یک سیستم آزمایش بشن.
    برای گرفتن زمان با دقت بالاتر میتونید از تابع QueryPerformanceCounter برای گرفتن زمان اجرای کد با دقت بالا (میکروثانیه باید باشه) استفاده کنید
    فکر میکنم دقتش بستگی به هرتز cpu داشته باشه که در زمان اجرا بسته به سخت افزار می تونه متفاوت بشه. منم تو کدم از همین استفاده کردم. کد من رو بازم ببینید :

    double GetNow()
    {
    LARGE_INTEGER lic, lif;
    QueryPerformanceCounter(&lic);
    QueryPerformanceFrequency(&lif);
    return (double)lic.QuadPart / (double)lif.QuadPart;
    }


    خیلی تابع خوبی هست برای زمان. تو کارهای انیمیشنی و کار با فریم بر ثانیه خیلی میتونه مفید باشه.

  22. #22
    کاربر دائمی آواتار #target
    تاریخ عضویت
    دی 1387
    محل زندگی
    استان گلستان
    پست
    589

    نقل قول: سرعت کامپایلر C++‎ builder یا visual C++‎ ؟؟؟

    آره . ی همچین چیزی . ی دستور اسمبلی هم هست RDTSC که میاد TimeStamp Counter رو داخل رجیستر EDX:EAX قرار میده
    این مقاله شاید جالب باشه براتون : Game Timing and Multicore Processors

  23. #23

    نقل قول: سرعت کامپایلر C++‎ builder یا visual C++‎ ؟؟؟

    ببینم GCC + Qt در بعضی موارد ( علی الخصوص سرعت و پایداری ) بهتر نیست ؟؟؟
    C++‎‎ CLI چی ( منظورم خارج از MFC و اینهاست ) ؟؟؟
    C++‎‎ CX ( البته اسمشو شک دارم ) چی ؟؟؟
    و درسته که میگن Java حداکثر 20% کند تره از C++‎‎ ( یه مقاله بلند بالا مقایسه کرده بود و نتیجه گرفته بود )

  24. #24
    کاربر دائمی آواتار #target
    تاریخ عضویت
    دی 1387
    محل زندگی
    استان گلستان
    پست
    589

    نقل قول: سرعت کامپایلر C++‎ builder یا visual C++‎ ؟؟؟

    نقل قول نوشته شده توسط mr AHR مشاهده تاپیک
    ببینم GCC + Qt در بعضی موارد ( علی الخصوص سرعت و پایداری ) بهتر نیست ؟؟؟
    C++‎‎ CLI چی ( منظورم خارج از MFC و اینهاست ) ؟؟؟
    C++‎‎ CX ( البته اسمشو شک دارم ) چی ؟؟؟
    و درسته که میگن Java حداکثر 20% کند تره از C++‎‎ ( یه مقاله بلند بالا مقایسه کرده بود و نتیجه گرفته بود )
    نمیشه گفت اونا پایدار تر یا سریعترن !
    CLI میاد و کتابخانه دات نت رو در سی ++ میاره برای استفاده .
    C++‎0x هست که نسخه جدیدی از استاندارد این زبان هست در سال 2011 ارایه شده
    جاوا فایلهاش احتیاج به ماشین مجازی داره و مستقیم کد ماشین نیست پس میتونه کندتر باشه

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •