প্রোগ্রামিং এ মেমরি পরিচালনা কি অপ্রাসঙ্গিক উদ্বেগ হয়ে উঠছে?
মেমরি পরিচালনা (বা নিয়ন্ত্রণ) হ'ল আমি সি এবং সি ++ ব্যবহার করছি এমন প্রাথমিক কারণ।
স্মৃতি এখন তুলনামূলকভাবে সস্তা।
দ্রুত স্মৃতি নয়। আমরা এখনও অল্প সংখ্যক নিবন্ধকের দিকে নজর রাখছি, আই 7-এ এল 1 এর জন্য 32 কেবি ডেটা ক্যাশে, এল 2 এর জন্য 256 কেবি এবং এল 3 / কোরের জন্য 2 এমবি জাতীয় কিছু। বলেছিল:
যদি আমরা ওয়ার্কিং মেমোরির (যেমন এম্বেড হওয়া সিস্টেম এবং এর মতো) কঠোর সীমাবদ্ধতার সাথে লক্ষ্য প্ল্যাটফর্মের ক্ষেত্রে কথা না বলি, তবে আজ সাধারণ উদ্দেশ্য ভাষা বেছে নেওয়ার সময় মেমরির ব্যবহার কি উদ্বেগজনক হওয়া উচিত?
সাধারণ স্তরে মেমরির ব্যবহার, সম্ভবত না। আমি কিছুটা অবৈধ যে এর জন্য আমি একটি নোটপ্যাডের ধারণাটি পছন্দ করি না, বলুন, 50 মেগাবাইট ডিআরএএম এবং কয়েকশ মেগাবাইট হার্ড ডিস্কের জায়গা, যদিও আমার কাছে অতিরিক্ত পরিমাণে এবং অতিরিক্ত পরিমাণে থাকার দরকার রয়েছে। আমি দীর্ঘদিন ধরে ছিলাম এবং কিলোবাইটের সাথে কী করণীয় তা করা উচিত এমন সাধারণ অ্যাপ্লিকেশনটি তুলনামূলকভাবে এত বেশি মেমোরি নেয় তা দেখতে আমার কাছে কেবল অদ্ভুত এবং একরকম মনে হয়। এটি বলেছিল, আমি এখনও নিজের সাথে বেঁচে থাকতে সক্ষম হলাম যদি আমি যদি এমন কিছু মুখোমুখি হয়ে থাকি তবে যদি তা এখনও সুন্দর এবং প্রতিক্রিয়াশীল হয়।
আমার ক্ষেত্রে মেমরি পরিচালনা যে কারণে গুরুত্বপূর্ণ তা সাধারণভাবে মেমরির ব্যবহার এতটা হ্রাস করা নয়। কয়েকশ মেগাবাইট মেমরির ব্যবহার অকার্যকরভাবে কোনও অ্যাপ্লিকেশনটি ধীরে ধীরে কমিয়ে দেয় না যদি সেই মেমরির কোনওটিই ঘন ঘন অ্যাক্সেস না করা হয় (উদা: কেবলমাত্র একটি বোতাম ক্লিক বা ব্যবহারকারী ইনপুটের কোনও অন্য রূপের উপর, যা আপনি যদি না অত্যন্ত বিরল হন কোরিয়ান স্টারক্রাফ্ট খেলোয়াড়দের সম্পর্কে কথা বলছেন যারা সেকেন্ডে কয়েক মিলিয়ন বার একটি বোতাম ক্লিক করতে পারে)।
আমার ক্ষেত্রে এটি যে কারণে গুরুত্বপূর্ণ তা হ'ল স্মৃতিশক্তি আঁটসাঁট হয়ে যাওয়া এবং একসাথে ঘনিষ্ঠ হওয়া যা খুব ঘন ঘন অ্যাক্সেস করা হয় (উদাহরণস্বরূপ: প্রতিটি একক ফ্রেমের উপরে লুপ করা হচ্ছে) সেই সমালোচনামূলক পথে। আমরা প্রতিবার লক্ষ লক্ষ উপাদানগুলির মধ্যে একটি মাত্র অ্যাক্সেস করতে চাই না যা প্রতি একক ফ্রেমে একটি লুপে অ্যাক্সেস করা দরকার। আমরা যখন স্মৃতিশক্তিটিকে ধীরে ধীরে স্মৃতি থেকে দ্রুত মেমরিতে বড় অংশগুলিতে স্থানান্তরিত করি, তখন 64৪ বাইট ক্যাশে লাইনগুলি বলুন, আমরা যদি সেই by৪ বাইটগুলির মধ্যে প্রাসঙ্গিক ডেটা রাখি তবে এটি সত্যিই সহায়ক, যদি আমরা সেই by৪ বাইটের মধ্যে একাধিক মূল্যের ডেটা ফিট করতে পারি, এবং যদি আমাদের অ্যাক্সেসের ধরণগুলি এমন হয় যে আমরা ডেটা সরিয়ে দেওয়ার আগে আমরা এটি ব্যবহার করি।
মিলিয়ন উপাদানগুলির জন্য ঘন ঘন অ্যাক্সেস করা ডেটা কেবল 20 মেগাবাইট বিস্তৃত হতে পারে যদিও আমাদের গিগাবাইট রয়েছে। এটি এখনও ফ্রেমের হারগুলিতে পৃথক করে তোলে যা সেই ডেটার উপরে আঁকা প্রতিটি ফ্রেম আঁকায় যদি মেমরিটি আঁটসাঁট হয়ে থাকে এবং একসাথে কাছাকাছি ক্যাশে মিস না করে, এবং মেমরি পরিচালনা / নিয়ন্ত্রণ এত দরকারী। কয়েক মিলিয়ন শিকড় সহ একটি গোলকের সরল ভিজ্যুয়াল উদাহরণ:
উপরেরটি আমার পরিবর্তনীয় সংস্করণটির চেয়ে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে উপস্থাপিত হয়ে এটি একটি জালের ডেটা কাঠামোর উপস্থাপনা পরীক্ষা করে, তবে তার পাশাপাশি, আমি অর্ধেক ডেটাতেও এমন ফ্রেম রেট অর্জনের জন্য সংগ্রাম করে যাচ্ছিলাম (স্বীকৃতভাবে হার্ডওয়্যার আমার সংগ্রামের পরেও দ্রুত গতি পেয়েছে) ) কারণ আমি জাল ডেটার জন্য ক্যাশে মিস করা এবং মেমরির ব্যবহার হ্রাস করতে পারি না didn't মেশস হ'ল কয়েকটি কৌশলগত ডেটা স্ট্রাকচার যা আমি এই বিষয়ে মোকাবিলা করেছি কারণ তারা এতগুলি আন্তঃনির্ভরশীল ডেটা সংরক্ষণ করে যেগুলি বহুভুজ, প্রান্ত, অনুভূমিকের মতো সিঙ্কে থাকতে হয়, যতগুলি টেক্সচার মানচিত্র ব্যবহারকারী সংযুক্ত করতে চায়, হাড়ের ওজন, রঙের মানচিত্র, নির্বাচনের সেট, আকারের লক্ষ্যমাত্রা, প্রান্তের ওজন, বহুভুজ উপকরণ ইত্যাদি ইত্যাদি ..
আমি গত কয়েক দশক ধরে বেশ কয়েকটি জাল সিস্টেম ডিজাইন করেছি এবং প্রয়োগ করেছি এবং তাদের গতি তাদের স্মৃতি ব্যবহারের জন্য প্রায়শই সমানুপাতিক ছিল। যদিও আমি এটি নিয়ে কাজ করছি, আমি যখন শুরু করেছি তার চেয়ে অনেক বেশি মেমরি, আমার নতুন জাল সিস্টেমগুলি আমার প্রথম ডিজাইনের (প্রায় 20 বছর আগে) থেকে 10 গুণ বেশি গতিযুক্ত এবং একটি বৃহত্তর ডিগ্রীতে কারণ তারা প্রায় 1/10 তম ব্যবহার করে স্মৃতি। সর্বাধিক নতুন সংস্করণ এমনকি যথাসম্ভব ডেটা ক্র্যাম করতে ইনডেক্সড সংকোচনের ব্যবহার করে এবং ডিকম্প্রেশনটির প্রসেসিং ওভারহেড সত্ত্বেও, সংক্ষেপণটি কার্যক্ষমতা উন্নত করেছে কারণ, আবার আমাদের কাছে খুব কম মূল্যবান দ্রুত স্মৃতি রয়েছে। আমি এখন প্রায় 30 মেগাবাইটের জন্য একটি স্থানিক সূচক সহ টেক্সচার কোঅর্ডিনেটস, এজ এরিজিং, ম্যাটেরিয়াল অ্যাসাইনমেন্ট ইত্যাদির সাথে মিলিয়ন বহুভুজ জাল ফিট করতে পারি।
এখানে 8 মিলিয়ন কোয়াড্রাঙ্গলস এবং একটি জিএফ 8400 সহ আই 3 এর উপর একটি মাল্টিয়ার্স মহকুমা স্কিমের মিউটেটেবল প্রোটোটাইপ রয়েছে (এটি কয়েক বছর আগে থেকেই ছিল)। এটি আমার অপরিবর্তনীয় সংস্করণের চেয়ে দ্রুত তবে উত্পাদনে ব্যবহার করা হয়নি কারণ আমি অপরিবর্তনীয় সংস্করণটি বজায় রাখা এত সহজ খুঁজে পেয়েছি এবং পারফরম্যান্সের আঘাতটি খুব খারাপ নয় isn't নোট করুন যে তারের ফ্রেমটি দিকগুলি নির্দেশ করে না, তবে প্যাচগুলি (তারগুলি আসলে বক্ররেখা হয়, অন্যথায় পুরো জাল শক্ত কালো হবে), যদিও একটি দিকের সমস্ত পয়েন্ট ব্রাশ দ্বারা সংশোধিত হয়।
যাইহোক, আমি কেবল উপরের কিছুটি দেখানোর জন্য কিছু দৃ concrete় উদাহরণ এবং ক্ষেত্রগুলি প্রদর্শন করতে চেয়েছিলাম যেখানে মেমরি পরিচালনা এত সহায়ক এবং আশাবাদী যাতে লোকেরা মনে করে না যে আমি কেবল আমার গুঁতা থেকে কথা বলছি। লোকেরা যখন বলে মেমরিটি প্রচুর পরিমাণে এবং সস্তা, তখন আমি কিছুটা বিরক্ত হওয়ার প্রবণতা দেখি কারণ এটি ডিআরএএম এবং হার্ড ড্রাইভের মতো ধীর স্মৃতি সম্পর্কে কথা বলে। এটি এখনও এত ছোট এবং এত মূল্যবান যখন আমরা দ্রুত মেমরির বিষয়ে কথা বলি, এবং সত্যিকারের সমালোচনামূলক (যেমন, সাধারণ ক্ষেত্রে, সবকিছুর জন্য নয়) পাথের জন্য পারফর্মেন্স সেই ছোট পরিমাণে দ্রুত মেমরির সাথে খেলা এবং এটি যতটা সম্ভব কার্যকরভাবে ব্যবহারের সাথে সম্পর্কিত ।
এই ধরণের জিনিসটির জন্য এমন ভাষার সাথে কাজ করা সত্যই সহায়ক যা আপনাকে সি ++ এর মতো উচ্চ-স্তরের অবজেক্টগুলি ডিজাইন করার অনুমতি দেয়, উদাহরণস্বরূপ, এখনও এই বিষয়গুলি এক বা একাধিক স্বতন্ত্র অ্যারেগুলিতে গ্যারান্টি সহ সঞ্চয় করতে সক্ষম হবার সাথে গ্যারান্টি রয়েছে যে এই জাতীয় সমস্ত বস্তু নিবিড়ভাবে উপস্থাপন করা হবে এবং কোনও বস্তু অনুসারে বিনা শর্তযুক্ত মেমরির ছাড়াই (উদাহরণস্বরূপ: সমস্ত বস্তুর প্রতিবিম্ব বা ভার্চুয়াল প্রেরণের প্রয়োজন নেই)। আপনি যখন প্রকৃতপক্ষে সেইগুলি সম্পাদন-সমালোচনামূলক ক্ষেত্রগুলিতে চলে যান, তখন বস্তুটির ওভারহেড, জিসি ব্যয়গুলি এড়াতে এবং বার বার অ্যাক্সেস রাখতে মেমরি ধরে রাখতে এ জাতীয় স্মৃতি নিয়ন্ত্রণের উপর নির্ভর করে বলুন, অবজেক্ট পুলগুলির সাথে ফিডিং এবং আদিম ডেটা ধরণগুলি ব্যবহার করা আসলে উত্পাদনশীলতা বৃদ্ধিতে পরিণত হয় becomes একসাথে মিলে
সুতরাং মেমরি পরিচালনা / নিয়ন্ত্রণ (বা এর অভাব) আসলে আমার ক্ষেত্রে সবচেয়ে বেশি কার্যকর যে কোন ভাষা আমাকে সমস্যাগুলি মোকাবেলায় মঞ্জুরি দেয় তা চয়ন করার ক্ষেত্রে আমার ক্ষেত্রে একটি প্রধান কারণ। আমি অবশ্যই আমার কোডের অংশটি লিখি যা পারফরম্যান্স-সমালোচনা নয় এবং এর জন্য আমি লুয়া ব্যবহার করি যা সি থেকে এম্বেড করা বেশ সহজ use