سؤال

لدي فلسفتان حول الغرض من المكدس قليلا وبعد بعض الترميز أحسب ما هو قوة. الشيء الوحيد الذي يكمن في StoMache هو كيف يعمل مع الوظائف؟ حاولت إجراء بعض الوظائف السهلة لإضافة رقمين باستخدام سجلات عالمية لكنني أفترض أن هذا ليس كيف يعمل في C على سبيل المثال .. أين توجد جميع المعلمات والمتغيرات المحلية وأين النتيجة المخزنة؟

كيف يمكنك إعادة كتابة هذا إلى المجمع؟ (كيف سيتم إرجاع التحويل البرمجي ل C لإعادة كتابة ذلك؟)

int function(int a, int &b, int *c){
 return a*(b++)+(*c);
}

أعلم أن هذا المثال تمتص كيندا .. ولكن بهذه الطريقة أستطيع أن أفهم كل الاحتمالات

هل كانت مفيدة؟

المحلول

ما تبحث عنه هو معلومات حول استدعاء الاتفاقيات. وبعد الطريقة التي يتم استدعاءها ويتم إرجاعها وإرجاعها على العديد من الأشياء، بما في ذلك بنية المعالج، برنامج التحويل البرمجي، ونظام التشغيل. يجب أن يوافق المتصل و Callee على الاتفاقية حتى يتم تمرير المعلمات وقيمة العودة بشكل صحيح.

نصائح أخرى

أولا قبالة، المراجع (int&) ليست في C، فقط C ++.

إذا كنت ترغب في معرفة ما يحدث تحت غطاء محرك السيارة مع دول مجلس التعاون الخليجي، فاستخدم -S علَم. لا تحتاج إلى الحصول على برنامج حقيقي.

g++ -S func.c

يخلق ملف func.s الذي يحتوي على (ناقص الرؤوس ومثله، على مربع X86):

    .text
.globl __Z8functioniRiPi
__Z8functioniRiPi:
LFB2:
    pushq   %rbp
LCFI0:
    movq    %rsp, %rbp
LCFI1:
    movl    %edi, -4(%rbp)
    movq    %rsi, -16(%rbp)
    movq    %rdx, -24(%rbp)
    movq    -16(%rbp), %rax
    movl    (%rax), %edx
    movl    %edx, %ecx
    imull   -4(%rbp), %ecx
    movq    -24(%rbp), %rax
    movl    (%rax), %eax
    addl    %eax, %ecx
    incl    %edx
    movq    -16(%rbp), %rax
    movl    %edx, (%rax)
    movl    %ecx, %eax
    leave
    ret

لاحظ اسم C ++ Mangling (__Z8functioniRiPi). الآن نحن نقدم g ++ -O2 علَم:

    .text
    .align 4,0x90
.globl __Z8functioniRiPi
__Z8functioniRiPi:
LFB2:
    pushq   %rbp
LCFI0:
    movq    %rsp, %rbp
LCFI1:
    movl    (%rsi), %ecx
    movl    %ecx, %eax
    imull   %edi, %eax
    addl    (%rdx), %eax
    incl    %ecx
    movl    %ecx, (%rsi)
    leave
    ret

-O3 يعطي نفس الكود؛ ليس هناك حقا أي شيء آخر للتحسين.

المتعة اللعب مع التجمع. ^ _ ^.

ما قاله آرون حول اتفاقيات الدعوة هو الجواب الصحيح. للاستكشاف الشخصي الخاص بي للموضوع الذي وجدته تحطيم المكدس من أجل المتعة والربح أن تكون تمرينا كبيرا في دور إطار مكدس وما الذي يمكن أن يحدث عندما يصبح تالفا. Finlay أوصي التجميع التمهيدي للمتسللين التي تمر بمفاهيم المجمع المهمة وكذلك أشياء ممتعة يمكنك القيام بها مع مصحح الأخطاء.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top