الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

ايهم أسرع السي/سي++ أم لغة الأسمبلي

مغلق
بدأه سلامة_2005 في 14 يناير 2006 · 17 رد · 1,534 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

العديد من الأشخاص يقولون ان لغة الاسمبلي اسرع بكثير من لغة السي/سي++ بكثير

هذا بجانب صغر حجم البرامج التي تنتجها مصرفات الاسمبلي

ولكني قرائة في موقع http://gcc.gnu.org/ ان مصرفات لغة سي/سي++ تستطيع إجراء عمليات

تحسين على الكود Code Optimization تجعل الشفرة الناتجه تعمل بسرعة كبيرة كما لو انها كتبة بلغة الأسمبلي

أفيدونا برأيكم... :s :wacko:

#2

أسرع لغـة هي الاسمبلي ثم السي ثم السي بلس بلس ...

أعتقد أن هذا لا شأن به في عـملية تحسين الكـود ...

ولكن بإمكانك استخدام لغـة الاسمبلي في الكـود لزيادة السرعـة فقط ....

#3
سلامة_2005 كتب:
العديد من الأشخاص يقولون ان لغة الاسمبلي اسرع بكثير من لغة السي/سي++  بكثير

هذا بجانب صغر حجم البرامج التي تنتجها مصرفات الاسمبلي

بيتهيألى الموضوع ده يعود إلى نوع التطبيق المطلوب.. :D

وبرضه على حسب الكود المستخدم :rolleyes:

#4

سرعة البرنامج تتوقف على المبرمج, بمعنى انه يمكنك كتابة برنامج بالسى بلس بلس يكون اسرع من برنامج كتبه شخص اخر بلغة الاسمبلي, إذا كان طريقة كتابتك للبرنامج تقوم بإستغلال الموارد بطريقة جيده..

ليست الاداة التى تستخدمها من يحدد سرعة برامجك وإنما قدرتك على إستخدام الاداة بطريقة جيده, بالتاكيد لغة الاسمبلى تتيح لك فرصة اكبر لمشاهدة التفاصيل الدقيقة وكل ما يحدث فى الجهاز, المشكله فى لغة الاسمبلى هى انه لا يوجد oop , يعنى من الصعب عمل مشاريع ضخمة يشترك فيها فريق من المبرمجين, وليس هناك standard معين وإنما كل مترجم له طريقته فى تنسيق الشفرة, على سبيل المثال masm يدعم بعض الادوات مثل if و while وغيرها من ادوات التحكم, بينما Fasm لا يدعمها وهكذا... بالنسبة للسي بلس بلس فاللغة متشابهه إلى حد كبير بين مترجمات Borland ومترجمات Gcc ومايكروسفت.. الاختلاف يكون فى اشياء بسيطة مثل دعم بعض المكتبات او نشوز بعض الاصدارات عن الـStandard المتفق عليه...

والسلام عليكم

لا إله إلا الله محمد رسول الله

busbar : يجب ان تدرك انه هناك حد ادنى للمعرفة المطلوبة قبل البدء في عمل أي شئ.

#5

اذا كان الامر على هذا النحو فما فائدة اوامر تحسين الكود "Optimization"

مع العلم انها تؤثر في سرعة التنفيذ للبرنامج وفي حجم البرنامج اثناء تجربتي لها مع بعض البرامج الرسومية

#6

هل يستطيع اي شخص ان يعطيني فكرة بسيطة عن عمل مصرف سي++ ؟

#7
سلامة_2005 كتب:
اذا كان الامر على هذا النحو فما فائدة اوامر تحسين الكود "Optimization"

مع العلم انها تؤثر في سرعة التنفيذ للبرنامج وفي حجم البرنامج اثناء تجربتي لها مع بعض البرامج الرسومية

ألـoptimization تقوم بعمل تغييرات في الكود هدفها تسريع العمل. مثلاً عملية فرد الحلقات Loop unfolding تقوم بالبحث عن حلقات ذات تكرار ثابت و تحويلها إلى سلسلة أوامر متتابعة من غير loop (لأن عملية الـloop مكلفة). و كذلك الـfunction substitution يقوم باستبدال نداء الدالات (عملية مكلفة أخرى) بكود الدالة نفسها في حالة كانت الدالة صغيرة. و هكذا دواليك.

#8

أخي العـزيز أنا كنت أقصد المقارنـة بين لغات البرمجـة من حيث السرعـة (بشكل بحت) دون أي اعتبار لتحسين الكـود ...

بالنسبة لفوائد تحسين الكـود .... فالبعض من هذه العـمليات لا يعتبر أصلاً فوائد أو مجرد ترف .... بعض الأحيان يعتمد برنامجك على هذا الأمر أي عـملية التحسين ...

بالنسبة لسؤالك الأخير حول مصرف السي بلس بلس وكيفية عمله... فأرجو ممن يعرف حول هذا الشأن أن يجيبك .. خاصة أن معلوماتي حول بناء المترجمات هي تقريباً الصفر

#9

السلام عليكم

مشاركة رقم ( 8 )

اقتباس

  أخي العـزيز أنا كنت أقصد المقارنـة بين لغات البرمجـة من حيث السرعـة (بشكل بحت) دون أي اعتبار لتحسين الكـود ...

بالنسبة لفوائد تحسين الكـود .... فالبعض من هذه العـمليات لا يعتبر أصلاً فوائد أو مجرد ترف .... بعض الأحيان يعتمد برنامجك على هذا الأمر أي عـملية التحسين ...

بالنسبة لسؤالك الأخير حول مصرف السي بلس بلس وكيفية عمله... فأرجو ممن يعرف حول هذا الشأن أن يجيبك .. خاصة أن معلوماتي حول بناء المترجمات هي تقريباً الصفر

هل استطيع المشاركة واجابة هذا السوال ؟ :rolleyes: :unsure:

اذا سمحتم لى .

تم تعديل هذه المشاركة بواسطة Nokia_2006 في 15 يناير 2006 في 03:27

#10

نعـم بإمكانك ....

#11

السلام عليكم

الاخ : سلامة ==>

بالنسبة لسوالك اى اللغتان تنتج برامج اسرع هذا لا يخص اللغة نفسها

اللغة مجرد قاعدة من الرموز والارقام والدوال تكون ثابته تقريبا ( IF for switch )

------------------------------------------------

بالنسبة للسرعة ممكن تكون مترجمات ++ C اسرع من مترجمات لغة asm ولكن هذا يرجع الى طريقة التعامل مع الكود

يعنى لغة السى تتحول الى لغة asm او الالة ( machine language )

ممكن يكون المترجم ++ C من ميكرو سوفت تكون ==> ابطىء من المترجم ++ C من شركة بورلاند والعكس صحيح

لكن اذا كنت ستتحدث عن السرعة بوجه عام

الاسمبلى هى الاسرع لكن هذا يعتمد على نوع المترجم الذى تستخدمه لهذه اللغة

وايضا طريقتك فى التعامل مع اللغة والكود وهل تستطيع عمل برنامج كبير لا يستهلك من الذاكرة مساحات ضخمة جدا هذا متوقف عليك

من ناحية السرعة :

ممكن يكون المترجم ++ C او asm المستخدم سريع

و ممكن لو اصدرة شركة اخرى نفس المترجم لنفس اللغتان ++ C او asm يكون بطىء فى التنفيذ

---------------------------------------------------------------------------

يعنى هل تستطيع ان تقول برنامج الياهو ابطىء من الهوت ميل او العكس

مع ان البرنامجين ينفذوا خدمة اساسية واحدة وهى المراسلة على شبكة الانترنت عن طريق الايميل ولكن يحتلف كل منهم فى

امور اخرى كمثل

مساحة البريد الخاص بك

او انك تلعب GAME او تبعت SMS او تحضر عفريت اثناء كتابة الرسائل

الفكرة ليست فى اى البرامج اقوى او اسرع فهذه الموضوعات فى المنتدى لم تجد لها جواب نهائى

-----------------------------------------------

اولا واخيرا

مترجمات اللغات هى مجرد برامج عادية خالص

ميزة السرعة بترجع الى المهندسين او المبرمجين الذين يقوموا بتصميم المترجم داخل الشركات الكبيرة مثل ميكرو سوفت

لكن اذا كنت تريد السرعة فى :

الاسمبلى استخدم مترجم == > MASM من ميكرو سوفت

لغة السى او السى ++ استخدم مترجم ==> visual C++ 6 او visual C# .net

ارجوا ان اكون وضحتلك المعلومة بشكل واضح

تم تعديل هذه المشاركة بواسطة Nokia_2006 في 15 يناير 2006 في 18:09

#12

ملاحظة بسيطة. MASM ليس مترجماً compiler مثل ++VC بل هو "مجمع" Assembler. المترجم يحول لغة عالية المستوى (مثل ++C) الى الآسمبلي أو لغة الآلة. بما أن الأسمبلي هو نفسه لغة الآلة (و لاتوجد لغة أقل مستوى منه) فلا داعي لوجود مترجم. المجمع فقط يقوم بتحويل أوامر الأسمبلي mneumonics الى رديفها من أوامر المعالج opcodes وهي عملية أبسط بكثير من عملية الترجمة و لا يوجد مكان فيها لتحسين أداء الكود كما في المترجمات. لذا لا يمكن المقارنة بينهما أبداً.

#13

صحيح اخى

تسمى مجمعات وليس مترجمات

ولكن يوجد بعض منها يعتمد الترجمة كمثل الاسمبلى العالى المستوى وبها متغيرات وحالات تحكم فهذا النوع ممكن يكون مترجمات

اما الاسمبلى بحد ذاتها فهى تعتبر مجمعات

#14

حسب معلوماتي المتواضعة ... : ) ،،

السي بالنهاية تتحول الى اسمبلي ...

يعني السرعة اثناء عمل البرنامج هي نفسها ... لان الكود اصبح اسمبلي × اسمبلي ,

اما اثناء ترجمة البرنامج ... فالسي تاخذ وقت لتحويلها الى اسمبلي ... و الاسمبلي مجرد تجميع مثل ما قالوا الاخوة .

أليس كذلك !!!!

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#15

سمعت (و العهدة على الراوي!) انه مع اصدارات بنتيوم الأخيرة, فإن هناك طريق معقدة جدا للقيام بالـ optimizations و لكن من الصعب جدا استغلال هذه الطرق من قبل البشر بسبب شدة تعقيدها, لذلك فقط الـ compilers قادرة على استغلالها, و في تلك الحالة ستقوم بإنشاء برنامج اسرع من البرنامج اللذي يكتبه الشخص بنفسه في الاسمبلي.

#16

السلام عليكم ورحمة الله

شكراً لكم جميعاً على هذه المعلومات ,,,, الغرض الرئيسي من هذه المقارنة هي الحصول على

طرق ممتازة لتحسين الكود الناتج من عملية الترجمة لشفرة سي/سي++

وجود برامج مكتوبة بلغة الاسمبلي تعمل بشكل ابطىء من برامج كتبة بلغة سي/سي++ بسبب نوع المجمع او المبرمج نفسه امر وارد

ولكن اذا كان المجمع جيد و كذلك المبرمج فالامر مختلف جداً

مترجمات السي/سي++ تحول الشفرة الى شفرة اسمبلي قبل عملية الربط وعلى حد علمي يمكن استخدام مثل هذه الشفرة

مع مجمع لغة الاسمبلي لزيادة جودة وسرعة الشفرة الناتجة

وأعتذر على كثرة الأسئلة. شكراً لكم جميعاً.

#17

لغة C بكونها لغة قريبة جداً من الأسمبلي تكون برامجها سريعة جداً لأنه لا توجد أي عمليات إضافية كثيرة و معظم أوامر الـC يمكن ترجمتها الى الأسمبلي مباشرة. أم بالنسبة للغات مثل ++C فالعملية ليست بهذه السهولة لأن هناك طبقات أخرى مثل خاصية الـOOP التي لا يمكن ترجمتها مباشرة بل تتطلب عمليات إضافية. هذا لا يعني بالضرورة أن يكون البرنامج أبطأ و لكن هذا يتطلب أن يكون المبرمج بدراية كافية بطريقة عمل برنامجه و ما يدور خلف الكواليس كما يقولون.

على العموم. فروقات السرعة البسيطة هذه كانت مهمة في أيام المعالجات البطيئة. أما الآن فمعظم هذه الفروقات غير محسوسة (ما عدا في البرامج ذات الحسابات المطولة و المعقدة مثل برامج الـ3d) لهذا دخلت الأسواق لغات مثل جافا و #C و حتى لغات interpreted مثل البيرل و البايثون.

#18

Read this article

Timing Pitfalls and Solutions

Muhammad Allam

Computer Science

@Resource(MappedURL="My Blog" )

هذا الموضوع مغلق.

مواضيع مشابهة