C در مقابل C ++ در مقابل C ++ 14 (مقایسه زمان در حال اجرا)

در حین برنامه نویسی ، ممکن است گاهی اوقات در موقعیتی گیر کرده باشید که وقتی تصمیم دارید این سؤال را در C و C ++ یا C ++ 14 انجام دهید ، در این صورت عامل تصمیم گیری به زمان اجرا و توانایی برنامه برای سازگاری با تغییرات در آینده . در اینجا C ++ ، C ++ 14 دارای بیش از C است زیرا در کتابخانه خود دارای توابع فوق العاده از پیش تعریف شده بنام کتابخانه الگوی استاندارد است که به طور کلی با عنوان STL شناخته می شود که مجموعه ای از کلاسهای قالب C ++ برای ارائه ساختارها و عملکردهای داده برنامه نویسی مشترک مانند لیست ها ، پشته ها است. ، آرایه ها ، و غیره این یک کتابخانه از کلاس های کانتینر ، الگوریتم ها و تکرار کننده ها است که با ارائه ساختارهای مختلف داده به برنامه نویس با یک کلیک ، وقت صرفه جویی می کند.

تفاوت عمده C و C ++ در این است که C یک زبان برنامه نویسی رویه ای است و کلاس ها و اشیاء را پشتیبانی نمی کند ، در حالی که C ++ ترکیبی از زبان برنامه نویسی رویه ای و شی گرا است. بنابراین C ++ را می توان یک زبان ترکیبی نامید.

حالا که به این نکته می رسیم ، ممکن است شنیده باشید که C ++ کندتر از C است اما آمار را دیده اید؟ پس از انجام تغییرات جزئی در برنامه ، می توانیم یک برنامه C ++ را همزمان یا حتی سریعتر از یک برنامه مربوطه که در C نوشته شده اجرا شود. در اینجا من دو سوال در مورد جستجوی باینری ایجاد کرده ام و سپس آنها را در C و C ++ و C ++ 14 کدگذاری کرده و زمان اجرا را با هم مقایسه کردم.

اگر به طور کلی از Cin / cout در C ++ استفاده می کنید ، ممکن است اصلاح زیر بسیار مفید باشد. فقط آن را در ابتدای برنامه گنجانده و از آن به صورت اصلی استفاده کنید و خوب است که بروید.

شما می توانید آنچه در اینجا انجام می دهد را پیدا کنید.

Q1 اسرار صابون

این یک سؤال کلی جستجوی باینری است که در آن نمایش داده شد q و باید تعداد دفعات جستجو را بصورت دودویی در عناصر n و شناسه پیچیدگی آن O (Q * Log (N)) که در آن N هیچ عنصر در آرایه وجود ندارد ، جستجو کنیم.

می توانید راه حل را در اینجا بیابید.

هنگام رمزگذاری آن و اجرای آن در موارد تست بزرگ ، این همان چیزی است که من بدست آوردم.

زمان اجرای Q1 با استفاده از G ++ 5.4.0

به وضوح می بینید که C بسیار سریعتر از C ++ 14 است اما نکته قابل توجه این است که در هنگام استفاده از این اصلاح (تقویت) به وضوح مشاهده می شود که C ++ 14 و C ++ نسبت به C در زمان اجرای خود بهتر است (در صورت وجود موارد تست بزرگ).

Q2 شروع توسعه بازی

این یک سؤال متوسط ​​متوسط ​​است که شامل انجام جستجوهای باینری N در یک آرایه 2 بعدی با ستونهای N و R و سپس پیدا کردن حداقل جواب به دست آمده در هر سطر که پاسخ نهایی ما است. پیچیدگی به نظر می رسد O (Nlog (M)).

راه حل را می توان در اینجا یافت.

اکنون کدگذاری آن بر روی 3 زبان مختلف در اینجا همان چیزی است که من کردم:

زمان اجرای Q2 با استفاده از G ++ 5.4.0

در اینجا همچنین به وضوح می توان دریافت که C از C ++ 14 بهتر عمل می کند اما با استفاده از این اصلاح ، C ++ سریع تر از C است.

برخی حتی از قفل getchar () استفاده می کنند (گرچه دارای نشت امنیتی است) ، که سریعترین در میان همه این موارد است زیرا مستقیماً می خواند و می نویسد با استفاده از رجیستری با عبور از مسیرهای عبور از بین (فقط در صورت استفاده از وقت نگران کننده است). بعضی اوقات محدودیت های زمانی سؤالات به حدی سخت است که این تغییرات یک قانون اساسی بازی می کنند ، بدون آنکه TLE بتواند از آن استفاده کند.

کامپایلر نیز نقش اساسی دارد. دو مورد از آنها G ++ 5.4.0 و CLANG هستند. کامپایلر یک برنامه کامپیوتری (یا مجموعه ای از برنامه ها) است که کد منبع نوشته شده در یک زبان برنامه نویسی (زبان مبدا) را به یک زبان رایانه دیگر (زبان مقصد) تبدیل می کند ، در حالی که دومی اغلب دارای یک فرم باینری است که به عنوان کد شیء معروف است. کامپایلری که بتواند این کار را سریعتر انجام دهد ، بهتر خواهد بود.

نتایج GCC

1. GCC از زبانهایی پشتیبانی می کند که clang هدف آنها نیست ، مانند Java ، Ada ، FORTRAN ، Go و غیره.

2. GCC از بسیاری از برنامه های افزودنی زبان پشتیبانی می کند ، برخی از آنها توسط Clang اجرا نمی شوند. به عنوان مثال ، در حالت C ، GCC از توابع تودرتو پشتیبانی می کند و دارای پسوند ای است که VLA ها را در سازه ها امکان پذیر می سازد.

نتایج CLANG

  1. Clang بسیار سریعتر است و از حافظه بسیار کمتری نسبت به GCC استفاده می کند.
  2. پشتیبانی Clang از C ++ از بسیاری جهات سازگارتر از GCC است.
  3. Clang از بسیاری از برنامه های افزودنی زبان پشتیبانی می کند ، برخی از آنها توسط GCC اجرا نمی شوند. به عنوان مثال ، Clang ویژگی هایی را برای بررسی ایمنی نخ ها و انواع بردار گسترده ارائه می دهد.
  4. Clang از ابتدا طراحی شده است تا تشخیص بسیار واضح و مختصر (پیام های خطا و هشدار دهنده) ارائه دهد ، و شامل پشتیبانی از تشخیص صریح است.

بنابراین این نتیجه گیری از فعالیت جالب من در مقایسه زمان اجرای بین دو زبان رایج در برنامه نویسی رایانه با استفاده از جستجوی دودویی به عنوان محوری است. امیدوارم با خواندن این مطلب دانش خاصی به دست آورده باشید و بتوانید زبان برنامه نویسی را به روشی بهتر انتخاب کنید.

خواندن مبارک!