এম্বেডড সিস্টেমে গ্লোবাল ভেরিয়েবলের ব্যবহার


17

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

আমার ফার্মওয়্যারটিকে আরও কমপ্যাক্ট করার জন্য আমি এই বিষয়ে আপনার লোকদের কাছ থেকে মূল্যবান পরামর্শ নিতে চাই।


এম্বেড থাকা সিস্টেমগুলির জন্য এই প্রশ্নটি অনন্য নয়। একটি সদৃশ এখানে পাওয়া যাবে
লন্ডিন

@ লন্ডিন আপনার লিঙ্কটি থেকে: "এই দিনগুলিতে কেবল এম্বেড করা পরিবেশের ক্ষেত্রে মেমরিটি বেশ সীমিত matters আপনি এম্বেড থাকা আগে অন্য পরিবেশের মতোই এবং প্রোগ্রামিংয়ের নিয়মগুলি বোর্ড জুড়ে একই বলে ধরে নেওয়ার আগে কিছু জানতে হবে" "
এন্ডোলিথ

@ এন্ডোলিথ staticফাইল স্কোপ "গ্লোবাল" এর মতো জিনিস নয়, নীচে আমার উত্তরটি দেখুন।
লন্ডিন

উত্তর:


31

আপনি @ ফিলের নির্দেশিকা যতক্ষণ মনে রাখবেন ততক্ষণ আপনি সাফল্যের সাথে বৈশ্বিক পরিবর্তনগুলি ব্যবহার করতে পারেন। তবে সংকলিত কোডটি কম কমপ্যাক্ট না করে তাদের সমস্যাগুলি এড়াতে এখানে কয়েকটি দুর্দান্ত উপায় are

  1. অবিচ্ছিন্ন অবস্থার জন্য স্থানীয় স্ট্যাটিক ভেরিয়েবলগুলি ব্যবহার করুন যা আপনি কেবল একটি ফাংশনের অভ্যন্তরে অ্যাক্সেস করতে চান।

    #include <stdint.h>
    void skipper()
    {
        static uint8_t skip_initial_cycles = 5;
        if (skip_initial_cycles > 0) {
            skip_initial_cycles -= 1;
            return;
        }
        /* ... */
    }
  2. সম্পর্কিত ভেরিয়েবলগুলি একসাথে রাখার জন্য একটি কাঠামো ব্যবহার করুন, এটি কোথায় পরিষ্কার করা উচিত এবং কোথায় নয় তা পরিষ্কার করে তুলতে।

    struct machine_state {
         uint8_t level;
         uint8_t error_code;
    } machine_state;
    
    struct led_state {
        uint8_t red;
        uint8_t green;
        uint8_t blue;
    } led_state;
    
    void machine_change_state()
    {
        machine_state.level += 1;
        /* ... */
        /* We can easily remember not to use led_state in this function. */
    }
    
    void machine_set_io()
    {
        switch (machine_state.level) {
        case 1:
            PIN_MACHINE_IO_A = 1;
            /* ... */
        }
    }
  3. কেবলমাত্র বর্তমান সি ফাইলের মধ্যে ভেরিয়েবলগুলি দৃশ্যমান করতে গ্লোবাল স্ট্যাটিক ভেরিয়েবলগুলি ব্যবহার করুন। নামকরণের বিরোধের কারণে এটি অন্য ফাইলগুলিতে কোড দ্বারা দুর্ঘটনাজনিত অ্যাক্সেসকে বাধা দেয়।

    /* time_machine.c */
    static uint8_t current_time;
    /* ... */
    
    /* delay.c */
    static uint8_t current_time; /* A completely separate variable for this C file only. */
    /* ... */

চূড়ান্ত নোট হিসাবে, আপনি যদি কোনও বাধা রুটিনের মধ্যে একটি বৈশ্বিক পরিবর্তনশীল পরিবর্তন করে অন্য কোথাও পড়ছেন:

  • ভেরিয়েবল চিহ্নিত করুন volatile
  • এটি সিপিইউর জন্য পারমাণবিক কিনা তা নিশ্চিত করুন (অর্থাত্ একটি 8-বিট সিপিইউর জন্য 8-বিট)।

অথবা

  • ভেরিয়েবল অ্যাক্সেস রক্ষা করতে একটি লকিং প্রক্রিয়া ব্যবহার করুন।

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

3
এটি "ওয়ার্ক ফাইন" এর সংকীর্ণ সংজ্ঞা। আমার বক্তব্যটি ছিল যে অস্থির কিছু ঘোষণা করা বিরোধগুলি রোধ করে না। এছাড়াও, আপনার তৃতীয় উদাহরণটি দুর্দান্ত ধারণা নয় - একই নামের সাথে দুটি পৃথক গ্লোবাল থাকা খুব কমপক্ষে কোডটি বোঝা / বজায় রাখা আরও কঠিন করে তোলে।
জন ইউ

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

2
@ জোহানু: volatileভেরিয়েবলগুলির সাধারণ ব্যবহার হ'ল এক কার্যকরকরণের প্রসঙ্গে কোড চলমানটিকে অন্য মৃত্যুদন্ড প্রসঙ্গে কোডটিকে জানাতে দেয় যে কিছু ঘটেছে। একটি 8-বিট সিস্টেমে, একটি বাফার যা 128 এর চেয়ে বেশি নয় এমন দুটি বাইটের পাওয়ার-অফ সংখ্যাটি ধরে রাখতে চলেছে একটি বাথরুমের বাইটের সাহায্যে বাফারে রাখা মোট জীবনকাল সংখ্যা (মোড 256) নির্দেশ করে একটি অস্থির বাইট পরিচালনা করা যায় and অপরটি আউটফিটের আজীবন সংখ্যাটি নির্দেশ করে, কেবলমাত্র একটি কার্যকরকরণের প্রসঙ্গটি বাফারে ডেটা রাখে এবং কেবল একটি এটি থেকে ডেটা নেয়।
সুপারক্যাট

2
@ জোহানু: বাফার পরিচালনা করতে কিছু ফর্ম লক করা বা অস্থায়ীভাবে বাধা নিষ্ক্রিয় করা সম্ভব হতে পারে, তবে এটি সত্যিই প্রয়োজনীয় বা সহায়ক নয়। যদি বাফারটি 128-255 বাইট ধরে থাকে তবে কোডিংটি কিছুটা পরিবর্তন করতে হবে এবং যদি এটির চেয়ে বেশি কিছু ধরে রাখতে হয় তবে বাধা নিষ্ক্রিয় করা সম্ভব হবে, তবে একটি 8-বিট সিস্টেমে বাফার ছোট হওয়ার জন্য উপযুক্ত; বড় বাফারযুক্ত সিস্টেমগুলি সাধারণত 8 বিটের চেয়ে বড় অ্যাটমিক লিখতে পারে।
সুপারক্যাট

24

আপনি যে কারণে 8-বিট সিস্টেমে গ্লোবাল ভেরিয়েবলগুলি ব্যবহার করতে চান না সেগুলি একই কারণ আপনি এগুলি অন্য কোনও সিস্টেমে ব্যবহার করতে চান না: তারা প্রোগ্রামটির আচরণ সম্পর্কে যুক্তিযুক্ত করে তোলে।

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

আপনার প্রোগ্রাম বুঝতে সহজ? এর আচরণ কি অনুমানযোগ্য? অন্যান্য অংশগুলি না ভেঙে এর অংশগুলি সংশোধন করা কি সহজ? যদি এই প্রতিটি প্রশ্নের উত্তর হ্যাঁ হয় , তবে আপনি একটি ভাল প্রোগ্রামের পথে।


1
@ মিশেলকারস যা বলেছিলেন - এই বিষয়গুলির অর্থ কী এবং তারা কীভাবে জিনিসগুলিকে প্রভাবিত করে (এবং কীভাবে তারা আপনাকে কামড় দিতে পারে) তা গুরুত্বপূর্ণ বিষয় understanding
জন ইউ

5

গ্লোবাল ভেরিয়েবলগুলি (সংক্ষেপে "গ্লোবাল") ব্যবহার করা আপনার পুরোপুরি এড়ানো উচিত নয়। তবে, আপনার এগুলি ন্যায়বিচারের সাথে ব্যবহার করা উচিত। গ্লোবালগুলির অত্যধিক ব্যবহার সহ ব্যবহারিক সমস্যাগুলি:

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

g_গ্লোবাল ভেরিয়েবলের নামের সাথে একটি উপসর্গ যুক্ত করা ভাল অনুশীলন । উদাহরণস্বরূপ g_iFlags,। আপনি যখন কোডটিতে উপসর্গের সাথে ভেরিয়েবলটি দেখেন, আপনি তত্ক্ষণাত বুঝতে পারবেন যে এটি একটি বিশ্বব্যাপী।


2
পতাকাটি বিশ্বব্যাপী হতে হবে না । ISR উদাহরণস্বরূপ, একটি স্থিতিশীল ভেরিয়েবল রয়েছে এমন একটি ফাংশন কল করতে পারে।
ফিল ফ্রস্ট

+1 আমি এর আগে এমন কৌশল সম্পর্কে শুনিনি। আমি উত্তর থেকে সেই অনুচ্ছেদটি সরিয়েছি। staticপতাকাটি কীভাবে দৃশ্যমান হবে main()? আপনি কি বোঝাচ্ছেন যে একই ফাংশনটি পরে staticএটি ফিরিয়ে দিতে পারে main()?
নিক Alexeev

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

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

1
@ স্প্রেপ্রোফেনি ভাল প্রোগ্রামাররা নিয়মের পিছনে কারণ বুঝতে পারে, তারপরে নিয়মাবলীর মতো আরও নিয়মগুলি আচরণ করে। গাইডলাইনগুলি যখন বিরোধে থাকে, তখন ভাল প্রগ্রেমার সাবধানতার সাথে ভারসাম্যটি ওজন করে।
ফিল ফ্রস্ট

4

এম্বেড থাকা কাজে বিশ্বব্যাপী ডেটা স্ট্রাকচারের সুবিধা হ'ল তারা স্থির। আপনার প্রয়োজনীয় প্রতিটি ভেরিয়েবল যদি বিশ্বব্যাপী হয় তবে ফাংশন প্রবেশ করানো হয়ে গেলে এবং স্ট্যাকের জন্য স্থান তৈরি করা হলে আপনি দুর্ঘটনাক্রমে কখনই স্মৃতি থেকে সরে যাবেন না। কিন্তু তারপরে, কেন এই মুহুর্তে ফাংশনগুলি রয়েছে? কেন এমন কোনও বড় ফাংশন যা সমস্ত যুক্তি এবং প্রক্রিয়াগুলি পরিচালনা করে না - যেমন কোনও বেসিক প্রোগ্রাম যেমন GOSUB অনুমোদিত নয়। আপনি যদি এই ধারণাটি যথেষ্ট পরিমাণে গ্রহণ করেন তবে আপনার 1970 এর দশক থেকে একটি সাধারণ সংসদীয় ভাষা প্রোগ্রাম থাকবে। দক্ষ, এবং অঙ্কুর বজায় রাখতে সমস্যা এবং অসম্ভব।

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

নোট করুন যে কোনও ফাংশনের অভ্যন্তরে এবং বাইরে স্ট্যাটিকের আলাদা অর্থ রয়েছে। /programming/5868947/difference-between-static-variable-inside-and-outside-of-a-function

/programming/5033627/static-variable-inside-of-a-function-in-c


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

4

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

সাধারন কম্পিউটার অ্যাপ্লিকেশনগুলিতে, সাধারণত কোনও কিছুর একের বেশি হতে পারে না এমন ধারণা করার কোনও বিশেষ কারণ নেই reason এম্বেড থাকা সিস্টেমে তবে এই ধরনের অনুমানগুলি প্রায়শই বেশি যুক্তিসঙ্গত হয়। যদিও এটি সম্ভব যে একাধিক যুগপত ব্যবহারকারীদের সমর্থন করার জন্য একটি সাধারণ কম্পিউটার প্রোগ্রামের আহ্বান করা যেতে পারে, তবে একটি সাধারণ এমবেডেড সিস্টেমের ইউজার ইন্টারফেসটি কোনও একক ব্যবহারকারী তার বোতাম এবং প্রদর্শনের সাথে ইন্টারঅ্যাক্ট করে অপারেশনের জন্য নকশা করা হবে। সেই হিসাবে এটি সময়ে যে কোনও মুহূর্তে একটি একক ব্যবহারকারী ইন্টারফেসের অবস্থা থাকবে। সিস্টেমটি ডিজাইন করে যাতে একাধিক ব্যবহারকারী একাধিক কীবোর্ড এবং প্রদর্শনগুলির সাথে ইন্টারঅ্যাক্ট করতে পারে তবে একক ব্যবহারকারীর জন্য এটির নকশা তৈরি করার চেয়ে অনেক বেশি জটিলতার প্রয়োজন হয় এবং প্রয়োগ করতে অনেক বেশি সময় নেয় take যদি সিস্টেমটিকে কখনও একাধিক ব্যবহারকারীকে সমর্থন করার আহ্বান না করা হয়, এই ধরনের ব্যবহারের সুবিধার্থে বিনিয়োগ করা অতিরিক্ত যে কোনও প্রচেষ্টা নষ্ট হবে। মাল্টি-ইউজার সাপোর্টের প্রয়োজন হওয়ার সম্ভাবনা না থাকলে মাল্টি-ইউজার সাপোর্টের প্রয়োজনে মাল্টি-ইউজার সাপোর্টের প্রয়োজন হয় এমন ক্ষেত্রে একক-ব্যবহারকারীর ইন্টারফেসের জন্য ব্যবহৃত কোডটি বাতিল করা ঝুঁকিপূর্ণ হওয়ার পক্ষে ঝুঁকিপূর্ণ হতে পারে multi ব্যবহারকারী সমর্থন যা সম্ভবত কখনও প্রয়োজন হবে না।

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


সুতরাং গ্লোবাল ভেরিয়েবলগুলি রাখা যা একে অপরের সাথে সংঘর্ষ না করে সঠিক সমস্যা হবে না। উদাহরণস্বরূপ: দিন গণনা করার জন্য যথাক্রমে ডে_সেন্টার, সাপ্তাহিক_কন্ট্রার ইত্যাদি। এবং আমি বিশ্বাস করি যে কাউকে ইচ্ছাকৃতভাবে একই উদ্দেশ্য অনুরূপ গ্লোবাল ভেরিয়েবলগুলি ব্যবহার করা উচিত নয় এবং স্পষ্টভাবে সেগুলি সংজ্ঞায়িত করতে হবে। অপ্রতিরোধ্য প্রতিক্রিয়ার জন্য অনেক ধন্যবাদ। :)
রুকি91

-1

প্রচুর লোক এই বিষয় সম্পর্কে বিভ্রান্ত। গ্লোবাল ভেরিয়েবলের সংজ্ঞাটি হ'ল:

আপনার প্রোগ্রামের যে কোনও জায়গা থেকে অ্যাক্সেসযোগ্য এমন কিছু।

এটি ফাইল স্কোপ ভেরিয়েবলগুলির মতো একই জিনিস নয় , যা কীওয়ার্ড দ্বারা ঘোষিত static। এরাই না গ্লোবাল ভেরিয়েবল, তারা স্থানীয় বেসরকারী ভেরিয়েবল।

 int x; // global variable
 static int y; // file scope variable

 void some_func (void) {...} // added to demonstrate that the variables above are at file scope.

আপনার কি বৈশ্বিক চলক ব্যবহার করা উচিত? কয়েকটি ক্ষেত্রে এটি ঠিক আছে:

অন্য প্রতিটি ক্ষেত্রে, আপনি বৈশ্বিক ভেরিয়েবলগুলি কখনও ব্যবহার করবেন না। এটি করার কোনও কারণ নেই। পরিবর্তে ফাইল স্কোপ ভেরিয়েবল ব্যবহার করুন , যা পুরোপুরি ঠিক আছে।

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


ডাউনটা কেন?
এম.আলিন

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

1
@ পলএ.ক্লেটন আমি "গ্লোবাল মেমরি বিভাগ" নামে একটি আনুষ্ঠানিক শব্দটি কখনও শুনিনি heard আপনার ভেরিয়েবলগুলি নিম্নলিখিত স্থানগুলির মধ্যে একটির সমাপ্ত হবে: রেজিস্টার বা স্ট্যাক (রানটাইম বরাদ্দ), হিপ (রানটাইম বরাদ্দ), .ডাটা বিভাগ (স্পষ্টরূপে স্ট্যাটিক স্টোরেজ ভেরিয়েবলগুলি), বিএসএস বিভাগ ( জিরো স্ট্যাটিক স্টোরেজ ভেরিয়েবল), .ড্রোটা (পড়ুন কেবলমাত্র ধ্রুবক) বা। পাঠ্য ( কোডের অংশ)। যদি সেগুলি অন্য কোথাও শেষ হয় তবে এটি কিছু প্রকল্প-নির্দিষ্ট সেটিং।
লন্ডিন

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