লুপের মধ্যে ভেরিয়েবল ঘোষণার জন্য কি কোনও ওভারহেড রয়েছে? (সি ++)


157

আমি কেবল ভাবছি যে আপনি যদি এমন কিছু করেন তবে গতি বা দক্ষতার কোনও ক্ষতি হবে কিনা:

int i = 0;
while(i < 100)
{
    int var = 4;
    i++;
}

যা একশবার ঘোষণা করে int var। এটি আমার কাছে মনে হবে সেখানে থাকবে তবে আমি নিশ্চিত নই। পরিবর্তে এটি করা কি আরও ব্যবহারিক / দ্রুত হবে:

int i = 0;
int var;
while(i < 100)
{
    var = 4;
    i++;
}

বা এগুলি কি একই, গতিময় এবং দক্ষতার ভিত্তিতে?


7
পরিষ্কার হতে হবে, উপরের কোডটি একশ বার বার "ডিক্লেয়ার" করে না।
জেসন

4
@ র্যাবডিশনকি: রেফারেন্স করা প্রশ্নটি হুবহু সদৃশ নয় কারণ এটি কোনও ভাষা নির্দিষ্ট করে না। এই প্রশ্নটি সি ++ এর সাথে নির্দিষ্ট । তবে আপনার রেফারেন্সযুক্ত প্রশ্নের পোস্ট করা উত্তর অনুসারে, উত্তরটি ভাষা এবং সম্ভবত সংকলকটির উপর নির্ভর করে।
ডেভিডআরআর

4
@ জেসন যদি কোডের প্রথম স্নিপেটটি ভেরিয়েবলকে 'বার' একশবার ঘোষণা না করে, আপনি কি ব্যাখ্যা করতে পারবেন কি হচ্ছে? এটি কি একবারে পরিবর্তনশীল ঘোষণা করে এবং এটি 100 বার শুরু করে? আমি ভেবেছি যে কোডটি 100 বার পরিবর্তনশীল ঘোষণা করে এবং সূচনা করে, যেহেতু লুপের সমস্ত কিছুই 100 বার কার্যকর করা হয় uted ধন্যবাদ
এলোমেলোভাবে ব্যবহারকারী 47534

উত্তর:


193

স্থানীয় ভেরিয়েবলের জন্য স্ট্যাক স্পেস সাধারণত ফাংশন স্কোপে বরাদ্দ করা হয়। সুতরাং কোনও স্ট্যাক পয়েন্টার সামঞ্জস্য লুপের মধ্যে ঘটে না, কেবল 4 থেকে 4 বরাদ্দ করে var। সুতরাং এই দুটি স্নিপেটের একই ওভারহেড রয়েছে।


50
আমি আশা করি যে এই ছেলেরা যারা কলেজের বাইরে পড়ায় তারা অন্তত এই প্রাথমিক জিনিসটি জানত। একবার তিনি লুপের ভিতরে ভেরিয়েবল ঘোষণা করে আমাকে উপহাস করলেন এবং আমি ভাবছিলাম যে কী ঘটবে যতক্ষণ না তিনি অভিনয় না করানোর কারণ হিসাবে উল্লেখ না করে এবং আমি "ডব্লিউটিএফ !?" এর মতো ছিলাম?
মেহেরদাদ আফশারি

18
আপনি কি এখনই স্ট্যাক স্পেস সম্পর্কে কথা বলার বিষয়ে নিশ্চিত? এর মতো একটি ভেরিয়েবল একটি নিবন্ধেও থাকতে পারে।
টোটো

4
@toto ভালো একটি পরিবর্তনশীল এছাড়াও হতে পারে কোথাও না - varপরিবর্তনশীল সক্রিয়া করা হয় কিন্তু ব্যবহার তাই একটি যুক্তিসঙ্গত অপ্টিমাইজার শুধু এটা সম্পূর্ণরূপে অপসারণ করতে পারেন (দ্বিতীয় স্নিপেট ব্যতীত কখনো যদি পরিবর্তনশীল লুপ পর কোথাও ব্যবহার করা হয়েছিল)।
সিআইপ্যান

@ মেহরদাদ আফশারি একটি লুপের একটি পরিবর্তনশীল তার কনস্ট্রাক্টরকে পুনরাবৃত্তির জন্য একবার কল করে। সম্পাদনা করুন - আমি দেখতে পাচ্ছি যে আপনি নীচে এটি উল্লেখ করেছেন, তবে আমি মনে করি এটি গ্রহণযোগ্য উত্তরেও উল্লেখের যোগ্য।
হুড্যাটিকাস

105

আদিম ধরণের এবং পিওডির ধরণের জন্য, এটি কোনও পার্থক্য করে না। সংকলকটি ফাংশনের শুরুতে ভেরিয়েবলের জন্য স্ট্যাকের স্থান বরাদ্দ করবে এবং ফাংশন উভয় ক্ষেত্রে ফিরে আসার সাথে সাথে এটি ডিএলোকট করবে।

নন-পিওডি ক্লাসের ধরণের জন্য যাদের মধ্যে তুচ্ছ ত্রুটিযুক্ত কনস্ট্রাক্টর রয়েছে, এটি একটি তাত্ক্ষণিকতা তৈরি করবে - সেক্ষেত্রে লুপের বাইরে ভেরিয়েবলটি স্থাপন করলে কেবল একবার কনস্ট্রাক্টর এবং ডেস্ট্রাক্টর এবং অ্যাসাইনমেন্ট অপারেটরকে প্রতিটি পুনরাবৃত্তি বলা হবে, যেখানে এটি ভিতরে স্থাপন করা হবে লুপ প্রতিটি পুনরাবৃত্তির জন্য কনস্ট্রাক্টর এবং ডেস্ট্রাক্টরকে কল করবে। ক্লাসের 'কন্সট্রাক্টর, ডেস্ট্রাক্টর এবং অ্যাসাইনমেন্ট অপারেটর কী করে তার উপর নির্ভর করে এটি পছন্দসই হতে পারে বা নাও পারে।


41
সঠিক ধারণা ভুল কারণ। লুপের বাইরে পরিবর্তনশীল। একবার নির্মাণ করা হয়েছে, একবার ধ্বংস হয়েছে তবে অ্যাসাইনমেন্ট অপারেটর প্রতিটি পুনরাবৃত্তি প্রয়োগ করে। লুপের ভিতরে পরিবর্তনশীল। কনস্ট্রাক্ট / ডিজ্যাটাক্টর প্রতিটি পুনরুক্তি প্রয়োগ করে তবে শূন্যের অ্যাসাইনমেন্ট ক্রিয়াকলাপ।
মার্টিন ইয়র্ক

8
এটি সেরা উত্তর তবে এই মন্তব্যগুলি বিভ্রান্তিকর। কনস্ট্রাক্টর এবং অ্যাসাইনমেন্ট অপারেটরকে কল করার মধ্যে একটি বড় পার্থক্য রয়েছে।
অ্যান্ড্রু গ্রান্ট

4
এটা তোলে হয় যদি সত্য হয় লুপ শরীর শুধু আরম্ভের জন্য, যাহাই হউক না কেন নিয়োগ করে। এবং যদি কেবল কোনও দেহ-স্বতন্ত্র / ধ্রুবক সূচনা হয় তবে অপটিমাইজার এটি উত্তোলন করতে পারে।
পিটারচেন

7
@ অ্যান্ড্রু গ্রান্ট: কেন। অ্যাসাইনমেন্ট অপারেটরটি সাধারণত টেম্পে কপি কন্সট্রাক্ট হিসাবে সংজ্ঞায়িত হয় তারপরে স্বাপের পরে (নিরাপদ থেকে ব্যতীত) ডেম্প টিএমপি নষ্ট করে দেয়। সুতরাং অ্যাসাইনমেন্ট অপারেটর উপরের চক্রটি নির্মাণ / ধ্বংসের চেয়ে আলাদা নয়। সাধারণ অ্যাসাইনমেন্ট অপারেটরের উদাহরণ হিসাবে স্ট্যাকওভারফ্লো.com/ প্রশ্নগুলি / 255612/… দেখুন ।
মার্টিন ইয়র্ক

4
যদি কনস্ট্রাক্ট / ডিসস্ট্রাক্ট ব্যয়বহুল হয় তবে তাদের মোট ব্যয় অপারেটর = এর ব্যয়ের উপর একটি যুক্তিসঙ্গত উপরের সীমা। কিন্তু কার্যভারটি সত্যই সস্তা হতে পারে। এছাড়াও, আমরা এই আলোচনাটি সিট থেকে সি ++ প্রকারে প্রসারিত করার সাথে সাথে, 'একই ধরণের মান থেকে পরিবর্তনশীল বরাদ্দকরণ' ব্যতীত অন্য কোনও অপারেশন হিসাবে 'var = 4' কে সাধারণকরণ করা যেতে পারে।
গ্রেগগো

68

এগুলি উভয়ই সমান, এবং সংকলকটি কী করে তা দেখে আপনি কীভাবে এটি সন্ধান করতে পারেন (অপটিমাইজেশন উচ্চমাত্রায় সেট না করেও):

সংকলক (gcc 4.0) আপনার সাধারণ উদাহরণগুলিতে কী করে তা দেখুন:

1.c:

main(){ int var; while(int i < 100) { var = 4; } }

gcc -S 1.c

1. এস:

_main:
    pushl   %ebp
    movl    %esp, %ebp
    subl    $24, %esp
    movl    $0, -16(%ebp)
    jmp L2
L3:
    movl    $4, -12(%ebp)
L2:
    cmpl    $99, -16(%ebp)
    jle L3
    leave
    ret

2.c

main() { while(int i < 100) { int var = 4; } }

gcc -S 2.c

2. এস:

_main:
        pushl   %ebp
        movl    %esp, %ebp
        subl    $24, %esp
        movl    $0, -16(%ebp)
        jmp     L2
L3:
        movl    $4, -12(%ebp)
L2:
        cmpl    $99, -16(%ebp)
        jle     L3
        leave
        ret

এগুলি থেকে আপনি দুটি জিনিস দেখতে পারবেন: প্রথমত, কোড উভয় ক্ষেত্রে একই।

দ্বিতীয়ত, ভেরের জন্য স্টোরেজটি লুপের বাইরে বরাদ্দ করা হয়:

         subl    $24, %esp

এবং অবশেষে লুপের একমাত্র জিনিস হ'ল অ্যাসাইনমেন্ট এবং শর্ত পরীক্ষা করা:

L3:
        movl    $4, -12(%ebp)
L2:
        cmpl    $99, -16(%ebp)
        jle     L3

সম্পূর্ণরূপে লুপটি সরিয়ে না নিয়ে আপনি যতটা দক্ষ হিসাবে কাজ করতে পারেন।


4
"লুপটি পুরোপুরি সরিয়ে না ফেলে আপনি যতটা দক্ষ তার পক্ষে কার্যকর" যথেষ্ট নয়। আংশিকভাবে লুপটি আনআরোলিং করা (এটি পাসের ক্ষেত্রে 4 বার বলে) এটি নাটকীয়ভাবে গতি বাড়িয়ে তুলবে। অপ্টিমাইজ করার আরও অনেকগুলি উপায় রয়েছে ... যদিও বেশিরভাগ আধুনিক সংকলক সম্ভবত বুঝতে পারবেন যে লুপ করার কোনও অর্থ নেই। যদি 'i' পরে ব্যবহার করা হয় তবে এটি কেবল 'i' = 100 সেট করে
দিত

এটি ধরে নিয়েছে যে কোডটি একেবারে বর্ধিত 'i' তে পরিবর্তিত হয়েছে ... যেমন এটি চিরকালের লুপ।
দারন

মূল পোস্টটি যেমন ছিল!
অ্যালেক্স ব্রাউন

4
আমি উত্তরগুলি পছন্দ করি যা প্রমাণ সহ তত্ত্বটি ফিরিয়ে দেয়! সমান কোড হওয়ার তত্ত্বটিকে এএসএম ডাম্প ব্যাকআপ করে দেখে ভাল লাগল। +1
জাভি মন্টেরো

4
আমি প্রতিটি সংস্করণের জন্য মেশিন কোড উত্পন্ন করে ফলাফলগুলি তৈরি করেছিলাম। এটি চালানোর দরকার নেই।
অ্যালেক্স ব্রাউন

13

এই দিনগুলিতে এটি লুপের মধ্যে ঘোষণা করা আরও ভাল তবে এটি ধ্রুবক না হলে কম্পাইলার কোডটি আরও ভাল করতে সক্ষম হবে (পরিবর্তনশীল সুযোগ হ্রাস করে)।

সম্পাদনা: এই উত্তরটি এখন বেশিরভাগই অপ্রচলিত। পোস্ট-ক্লাসিকাল সংকলকগুলির উত্থানের সাথে, সংকলকগুলি এটি সনাক্ত করতে পারে না এমন ক্ষেত্রে বিরল দেখা যায়। আমি এখনও এগুলি নির্মাণ করতে পারি তবে বেশিরভাগ লোক নির্মাণকে খারাপ কোড হিসাবে শ্রেণিবদ্ধ করে।


4
আমি সন্দেহ করি এটি অপ্টিমাইজেশনের উপর প্রভাব ফেলবে - সংকলক যদি কোনও প্রকার ডেটা প্রবাহ বিশ্লেষণ সম্পাদন করে তবে এটি নির্ধারণ করতে পারে যে এটি লুপের বাইরে পরিবর্তন করা হচ্ছে না, সুতরাং উভয় ক্ষেত্রেই এটি একই রকমের অনুকূলিত কোড তৈরি করা উচিত।
অ্যাডাম রোজেনফিল্ড

4
যদিও একই টেম্প ভেরিয়েবল নামটি ব্যবহার করে আপনার কাছে দুটি পৃথক লুপ রয়েছে তা এটি খুঁজে পাবে না।
জোশুয়া

11

বেশিরভাগ আধুনিক সংকলক আপনার জন্য এটি অনুকূল করে তুলবে। এটি আরও পাঠযোগ্য বলে আমি আপনার প্রথম উদাহরণটি ব্যবহার করব বলে বলা হচ্ছে।


4
আমি সত্যিই এটি একটি অপ্টিমাইজেশন হিসাবে গণনা করি না। যেহেতু তারা স্থানীয় ভেরিয়েবল, ফাংশনের শুরুতে স্ট্যাকের স্থানটি বরাদ্দ করা হয়েছে। পারফরম্যান্সের ক্ষতি করার জন্য সত্যিকারের "সৃষ্টি" জড়িত নেই (যদি না কোনও কনস্ট্রাক্টর ডাকা হয়, যা সম্পূর্ণ অন্য গল্প)।
মেহরদাদ আফশারি

আপনারা ঠিক বলেছেন, "অপ্টিমাইজেশন "টি ভুল শব্দ তবে আমি এর থেকে আরও ভাল শব্দটির ক্ষতি করছি।
অ্যান্ড্রু হরে

সমস্যাটি হ'ল এই ধরণের অপটিমাইজার লাইভ রেঞ্জ বিশ্লেষণ ব্যবহার করবে এবং উভয় ভেরিয়েবল বরং মৃত।
MSalters

কীভাবে "সংকলক তথ্য প্রবাহ বিশ্লেষণ করে একবার তাদের মধ্যে কোনও পার্থক্য দেখতে পাবেন না"। ব্যক্তিগতভাবে আমি পছন্দ করি যে ভেরিয়েবলের সুযোগটি যেখানে ব্যবহার করা হয় সেখানে সীমাবদ্ধ রাখতে হবে, দক্ষতার জন্য নয় বরং স্বচ্ছতার জন্য।
গ্রেগগো

9

অন্তর্নির্মিত প্রকারের জন্য সম্ভবত 2 টি শৈলীর মধ্যে কোনও পার্থক্য থাকবে না (সম্ভবত উত্পন্ন কোডের নিচে)।

তবে, ভেরিয়েবলটি যদি একটি অ-তুচ্ছ কনস্ট্রাক্টর / ডেস্ট্রাক্টর সহ একটি শ্রেণি হয় তবে রানটাইম ব্যয়ের ক্ষেত্রে একটি বড় পার্থক্য থাকতে পারে। আমি সাধারণত লুপটির অভ্যন্তরে ভেরিয়েবলটি (স্কোপটি যথাসম্ভব ছোট রাখার জন্য) স্কোপ করতাম, তবে যদি এটির পারফেক্ট এফেক্ট দেখা দেয় তবে আমি লুপের স্কোপের বাইরে ক্লাস ভেরিয়েবল সরিয়ে নেওয়ার চেষ্টা করব। তবে এটি করার জন্য কিছু অতিরিক্ত বিশ্লেষণের দরকার রয়েছে কারণ ওড পাথের শব্দার্থবিজ্ঞানের পরিবর্তন হতে পারে, সুতরাং এটি কেবলমাত্র সিমেটিক্স যদি অনুমতি দেয় তবে এটি করা যেতে পারে।

কোনও RAII শ্রেণীর এই আচরণের প্রয়োজন হতে পারে। উদাহরণস্বরূপ, ফাইল অ্যাক্সেসের আজীবন পরিচালিত একটি শ্রেণীর ফাইল অ্যাক্সেস সঠিকভাবে পরিচালনা করতে প্রতিটি লুপ পুনরাবৃত্তিতে তৈরি এবং ধ্বংস করা প্রয়োজন।

মনে করুন আপনার একটি LockMgrশ্রেণি রয়েছে যা একটি সমালোচনামূলক বিভাগটি তৈরি করার সময় এটি অর্জন করে এবং ধ্বংস হয়ে গেলে এটি প্রকাশ করে:

while (i< 100) {
    LockMgr lock( myCriticalSection); // acquires a critical section at start of
                                      //    each loop iteration

    // do stuff...

}   // critical section is released at end of each loop iteration

এর থেকে বেশ আলাদা:

LockMgr lock( myCriticalSection);
while (i< 100) {

    // do stuff...

}

6

উভয় লুপ একই দক্ষতা আছে। তারা উভয় সময়ই অসীম পরিমাণে নেবে :) আমি লুপগুলির ভিতরে বাড়িয়ে নেওয়া ভাল ধারণা হতে পারে।


হ্যাঁ হ্যাঁ, আমি স্থান দক্ষতা সম্বোধন করতে ভুলে গেছি - ঠিক আছে - দুজনের জন্য 2 টি ইনস। প্রোগ্রামাররা গাছটির জন্য বনটি মিস করছে - এটি আমার কাছে কেবল অদ্ভুত বলে মনে হচ্ছে - এমন কিছু কোড সম্পর্কে এই সমস্ত পরামর্শ যা শেষ হয় না।
ল্যারি ওয়াতানাবে

তারা যদি সমাপ্ত না হয় তবে ঠিক আছে। তাদের একজনকেও ডাকা হয় না। :-)
নসরেডনা

2

আমি একবার কিছু ছদ্মবেশ পরীক্ষা চালিয়েছিলাম, এবং আমার অবাক করে দিয়েছি যে 1 কেসটি আসলে দ্রুত ছিল! আমি মনে করি এটি এর কারণ হতে পারে কারণ লুপের অভ্যন্তরে ভেরিয়েবল ঘোষণার ফলে এর পরিধি হ্রাস পায়, তাই এটি আগে নিখরচায় হয়ে যায়। যাইহোক, এটি একটি দীর্ঘ সময় আগে, একটি খুব পুরানো সংকলক ছিল। আমি নিশ্চিত যে আধুনিক সংকলকরা বিচ্ছিন্নতাগুলি অপসারণের জন্য আরও ভাল কাজ করেন তবে আপনার পরিবর্তনশীল সুযোগটি যত তাড়াতাড়ি সংক্ষিপ্ত রাখতে ততক্ষণ আঘাত লাগে না।


পার্থক্যটি সম্ভবত সুযোগের পার্থক্য থেকে আসে। সংক্ষিপ্ততর যত কম সম্ভাবনা কম সংকলক ভেরিয়েবলের সিরিয়ালাইজেশন মুছে ফেলতে সক্ষম হয়। ছোট লুপ স্কোপে ভেরিয়েবলটি সম্ভবত একটি রেজিস্টারে রাখা হয়েছিল এবং স্ট্যাক ফ্রেমে সংরক্ষণ করা হয়নি। আপনি যদি লুপটিতে কোনও ফাংশন কল করেন বা একটি পয়েন্টারটিকে অবহিত করে সংকলকটি সত্যই জানেন না কোথায় এটি নির্দেশ করে, এটি ফাংশন স্কোপে থাকলে লুপ ভেরিয়েবলটি ছড়িয়ে দেবে (পয়েন্টারে থাকতে পারে &i)।
প্যাট্রিক Schlüter

আপনার সেটআপ এবং ফলাফল পোস্ট করুন।
jxramos

2
#include <stdio.h>
int main()
{
    for(int i = 0; i < 10; i++)
    {
        int test;
        if(i == 0)
            test = 100;
        printf("%d\n", test);
    }
}

উপরের কোডটি সর্বদা 100 টি 10 ​​বার মুদ্রণ করে যার অর্থ লুপের অভ্যন্তরে স্থানীয় পরিবর্তনশীল প্রতিটি ফাংশন কল প্রতি একবার বরাদ্দ করা হয়।


0

এগুলি নিশ্চিত করার একমাত্র উপায়। তবে পার্থক্যটি যদি একটি থাকে তবে অণুবীক্ষণিক হবে, সুতরাং আপনার একটি শক্তিশালী বড় টাইমিং লুপের প্রয়োজন হবে।

আরও উল্লেখযোগ্য বিষয় হল, প্রথমটিটি আরও ভাল স্টাইল কারণ এটি ভেরিয়েবলটি সূচনা করে, অন্যটি এটি অবিচ্ছিন্ন করে ফেলে। এটি এবং নির্দেশিকাগুলি যেগুলি ব্যবহারের পক্ষে তাদের ব্যবহারের দিকের নিকটবর্তী হিসাবে ভেরিয়েবলগুলি সংজ্ঞায়িত করা উচিত, এর অর্থ হ'ল প্রথম ফর্মটি সাধারণত পছন্দ করা উচিত।


"নিশ্চিত হওয়ার একমাত্র উপায় হ'ল তাদের সময় দেওয়া" " -1 অসত্য। দুঃখিত, তবে অন্য পোস্টটি উত্পাদিত মেশিন ভাষার তুলনা করে এবং এটি মূলত অভিন্ন হিসাবে আবিষ্কার করে এটি ভুল প্রমাণ করেছে। আপনার উত্তরটি নিয়ে সাধারণভাবে আমার কোনও সমস্যা নেই, তবে -১ এর জন্য কী ভুল?
বিল কে

নির্গত কোড পরীক্ষা করা অবশ্যই দরকারী, এবং এর মতো সাধারণ ক্ষেত্রে যথেষ্ট হতে পারে। তবে আরও জটিল ক্ষেত্রে যেমন রেফারেন্সের লোকাল তাদের মাথা পিছনে দেয় এবং এগুলি কেবল মৃত্যুদন্ড কার্যকর করার সময় দ্বারা পরীক্ষা করা যায়।

-1

মাত্র দুটি ভেরিয়েবল সহ, সংকলক সম্ভবত উভয়ের জন্য একটি রেজিস্টার বরাদ্দ করবেন। এই রেজিস্টারগুলি যেভাবেই হোক না কেন, এতে সময় লাগে না। দুটি ক্ষেত্রে নিবন্ধের লিখন এবং একটি নিবন্ধের পড়ার নির্দেশ রয়েছে either


-2

আমি মনে করি যে সর্বাধিক উত্তরগুলি বিবেচনার জন্য একটি প্রধান বিষয় অনুপস্থিত, যা হ'ল: "এটি কি পরিষ্কার" এবং স্পষ্টতই সমস্ত আলোচনার দ্বারা সত্যটি হয়; না এটা না. আমি বেশিরভাগ লুপ কোডে পরামর্শ দেব যে দক্ষতা প্রায় অ-ইস্যু (যদি আপনি মার্স ল্যান্ডারের জন্য গণনা না করেন), তবে সত্যই একমাত্র প্রশ্নটি আরও বুদ্ধিমান এবং পাঠযোগ্য এবং রক্ষণাবেক্ষণযোগ্য বলে মনে হচ্ছে - এই ক্ষেত্রে আমি ঘোষণার সুপারিশ করব পরিবর্তনশীল সামনে এবং লুপের বাইরে - এটি কেবল এটি আরও পরিষ্কার করে তোলে। তারপরে আপনার ও আমার মতো লোকেরা এটি বৈধ কিনা না তা দেখার জন্য অনলাইনে চেক করে সময় নষ্ট করাও বিরক্ত করবেন না।


-6

এটি সত্য নয় যে ওভারহেড রয়েছে তবে এর অবহেলা সক্ষম ওভারহেড।

যদিও তারা স্ট্যাকের একই জায়গায় শেষ হবে এটি এখনও এটি নির্ধারিত করে। এটি সেই ইন্টারটির জন্য মেমরির অবস্থান নির্ধারণ করবে এবং তারপরে এটি} এর শেষে মুক্ত করবে free অর্থে হিপ ফ্রি অর্থে এটি স্পে (স্ট্যাক পয়েন্টার) 1 দ্বারা সরানো হবে না এবং আপনার ক্ষেত্রে বিবেচনা করে এটির জন্য কেবল একটি স্থানীয় ভেরিয়েবল রয়েছে এটি কেবলমাত্র সমান হবে fp (ফ্রেম পয়েন্টার) এবং এসপি

সংক্ষিপ্ত উত্তরটি হবে: অন্য যেভাবে কাজ করে সেদিকেই যত্ন নেই।

তবে স্ট্যাকটি কীভাবে সংগঠিত হয়েছে সে সম্পর্কে আরও পড়ার চেষ্টা করুন। আমার আন্ডারগ্র্যাড স্কুলটিতে বেশ ভাল বক্তৃতা ছিল আপনি যদি এখানে আরও পড়তে চান তবে http://www.cs.utk.edu/~plank/plank/classes/cs360/360/notes/Assembler1/lecture.html


আবার, -1 অসত্য। যে সমাবেশটি দেখেছিলেন সেগুলি পড়ুন।
বিল কে

নাহ আপনি ভুল করছেন। সেই কোডটি দিয়ে উত্পন্ন
এসেমব্লার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.