স্ট্যাক + হিপ + স্ট্যাটিক মেমরি মডেলগুলির বিকল্প রয়েছে?


9

আমি যে সমস্ত প্রোগ্রাম দেখেছি তাদের ডেটা মেমরিকে এক বা একাধিক কল স্ট্যাকগুলিতে (সাধারণত স্থির আকার, তবে কখনও কখনও না), হিপ এবং স্থির মেমরিগুলিতে সংগঠিত করে। ইদানীং থ্রেড-লোকাল স্ট্যাটিক স্টোরেজও এতে যুক্ত করা হয়েছে।

মৌলিকভাবে আলাদাভাবে ডেটা মেমরি বিন্যাসকে সংগঠিত করার কোনও প্রচেষ্টা করা হয়েছে, যেমন কল স্ট্যাক ছাড়াই? অথবা মেমরিটিকে আলাদাভাবে সংগঠিত করুন যা একই জিনিসটি সম্পাদন করে?


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

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

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

2
আপনি এরিক লিপার্টের পোস্ট পেতে পারেন, কেন একটি স্ট্যাক রয়েছে? সুদ. তার মূল বিষয়টি হ'ল একটি স্ট্যাক মেমরির অবস্থানগুলি ট্র্যাক করার জন্য একটি কার্যকর, সহজ উপায় সরবরাহ করে। তিনি বহু পুরানো পোস্টে একটি বিকল্প নিয়ে আলোচনা করেছেন, কন্টিনিয়েশন পাসিং স্টাইল
ব্রায়ান

উত্তর:


8

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

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

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

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

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

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

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

আপনার যদি একটি অ্যাপ থাকে তবে এর জন্য বৃহত ব্লকগুলি বরাদ্দের প্রয়োজনীয়তা রয়েছে, আপনি সরাসরি ভিএমএম-এ যাওয়ার কথা বিবেচনা করতে পারেন, যদিও কিছু স্তূপের ম্যালোক () এর ভিতরে যদি একটি স্টেট-স্টেটমেন্ট থাকে এবং যদি ব্লকের আকার কিছুটা প্রান্তিকের চেয়ে বেশি হয়, তারা কেবল ভিএমএম-এ যান to তোমার জন্য.

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

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

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


1

আমি কেবলমাত্র কেসগুলিই বিশেষায়িত হার্ডওয়্যারে ভাবতে পারি যেখানে আপনার মেমরির স্থির স্থানে সমস্ত কিছু চলতে পারে। আপনি পুরোপুরি নমনীয় প্রোগ্রামগুলি চাইলে বর্তমান মেমরির মডেলের বেশ কিছু প্রয়োজন।

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

স্ট্যাটিক মেমোরি এবং হিপগুলি আপনি নির্দিষ্ট অ্যাপ্লিকেশনগুলির জন্য সম্ভাব্যভাবে ফেলে দিতে পারেন, তবে আবার আরও কিছু উন্নত করার জন্য আপনাকে সেগুলি কোনও ফর্ম বা অন্যটিতে ফিরে আসতে হবে।

সুতরাং আপনি এই তিনটির যে কোনও একটি প্রতিস্থাপনের জন্য উদ্ভাবিত যে কোনও কিছুই শেষ পর্যন্ত এই তিনটির মধ্যে একটির মতো দেখতে অনেকটা শেষ হতে চলেছে ...

অন্য কোণ থেকে এটি পৌঁছানোর জন্য, আপনি নতুন কি যোগ করতে পারেন? আপনি গ্রাফিক্স / পদার্থবিজ্ঞান প্রসেসর / সিপিইউ ক্যাশে / ইত্যাদির মতো জিনিসগুলিকে সম্ভবত একটি নতুন স্মৃতি অবস্থান হিসাবে যুক্তি দিতে পারেন, তবে সত্যই এগুলি কেবল একটি পৃথক উদাহরণ বা বিদ্যমান মডেলগুলিতে অ্যাক্সেস গতি বাড়ানোর উপায়।

... সুতরাং যতক্ষণ না কেউ কোনও ধরণের বিশাল দৈত্য ধারণামূলক লাফ নিয়ে আসে আমি মনে করি আমরা দীর্ঘদিন ধরে এই ক্ষেত্রে কোনও বড় পরিবর্তন দেখতে পাব না ...


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

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

@ অ্যারোনআউট আমি মনে করি আমি এটি "untilেকে দিয়েছি যতক্ষণ না কেউ কোনও ধরণের বিশাল দৈত্য ধারণামূলক লাফিয়ে আসে";) আপনার কাছে যদি আরও ভাল বিকল্পের মডেল থাকে তবে এটি নির্দ্বিধায় নির্দ্বিধায় অনুভব করুন ... যদি না হয় তবে এটি সম্পর্কে অভিযোগ করা কিছুটা ভণ্ডামি অনুভব করে "কিছু লোক" আপনি যখন তাদের একজন হন :)
টিম বি

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

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