স্মৃতিচারণের ক্ষেত্রে আখড়া শব্দের অর্থ কী?


103

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

"সিরিয়ালাইজেশনের পরবর্তী উদাহরণে একটি নির্দিষ্ট ক্ষেত্র থেকে মেমরি বরাদ্দ নামক একটি কৌশল অন্তর্ভুক্ত করা হয়েছে ।"

"... মেমোরি ফাঁস নিয়ে কাজ করার সময় বা একটি নির্দিষ্ট ক্ষেত্র থেকে বরাদ্দকালে এটি দরকারী " "

"... আমরা যদি স্মৃতিটিকে হ্রাস করতে চাই তবে আমরা পুরো আঞ্চলিক স্থানটি বাতিল করব ।"

লেখক একটি অধ্যায়ে 100 বারের বেশি শব্দটি ব্যবহার করেছেন। শব্দকোষের একমাত্র সংজ্ঞা:

আখড়া থেকে বরাদ্দ - প্রথমে একটি আখড়া বরাদ্দ করার প্রযুক্তি এবং তারপরে প্রোগ্রামটি নিজেই (বরং তারপরে প্রক্রিয়া মেমরি ম্যানেজারের মাধ্যমে) আখড়ার মধ্যে বরাদ্দ / অবনতি পরিচালনা করার কৌশল; জটিল ডেটা স্ট্রাকচার এবং অবজেক্টগুলির সংযোগ এবং সিরিয়ালাইজেশনের জন্য, বা সুরক্ষা-সমালোচনা এবং / বা ত্রুটি-সহনশীল সিস্টেমে মেমরি পরিচালনার জন্য ব্যবহৃত হয়।

এই প্রসঙ্গে আপনারা কি কেউ আমার জন্য আখড়া সংজ্ঞায়িত করতে পারেন ?


বইটির নাম কী?
ইয়াওবিন

4
ফ্র্যান্তেসেক ফ্রাঙ্কের সি এবং সি ++ তে প্রোগ্রামিং কনসেপ্ট হিসাবে অযোবিন মেমোরি।
নিশাচরো

উত্তর:


113

একটি আখড়া হ'ল মেমরির একটি বৃহত, সংলগ্ন অংশ যা আপনি একবার বরাদ্দ করেন এবং তারপরে সেই মেমরির অংশগুলি হস্তান্তর করে ম্যানুয়ালি ম্যানেজ করতে ব্যবহার করেন। উদাহরণ স্বরূপ:

char * arena = malloc(HUGE_NUMBER);

unsigned int current = 0;

void * my_malloc(size_t n) { current += n; return arena + current - n; }

মুল বক্তব্যটি হ'ল মেমরি বরাদ্দ কীভাবে কার্যকর হয় তার উপরে আপনি সম্পূর্ণ নিয়ন্ত্রণ পান। আপনার নিয়ন্ত্রণের বাইরে কেবলমাত্র প্রাথমিক বরাদ্দের জন্য একক লাইব্রেরি কল।

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

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


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

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

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

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

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

10

আমি সম্ভাব্য উত্তর হিসাবে এটির সাথে যাব

•Memory Arena (also known as break space)--the area where dynamic runtime memory is stored. The memory arena consists of the heap and unused memory. The heap is where all user-allocated memory is located. The heap grows up from a lower memory address to a higher memory address.

আমি উইকিপিডিয়ায় প্রতিশব্দ যুক্ত করব : অঞ্চল, অঞ্চল, অঞ্চল, অঞ্চল বা মেমরি প্রসঙ্গে।

মূলত এটি ওএস থেকে পাওয়া স্মৃতি এবং ডিভিউ আউট, এরপরে একবারে মুক্তি দেওয়া যেতে পারে। এর সুবিধাটি হ'ল বারবার ছোট কলগুলি malloc()ব্যয়বহুল হতে পারে (প্রতিটি মেমরি বরাদ্দের একটি কার্য সম্পাদনের জন্য ব্যয় হয়: আপনার প্রোগ্রামের লজিকাল ঠিকানার জায়গাতে মেমরির বরাদ্দ করতে যে সময় লাগে এবং সেই ঠিকানা স্থানটি শারীরিক স্মৃতিতে বরাদ্দ করতে সময় লাগে) যেখানে আপনি যদি একটি বল পার্ক জানেন তবে আপনি নিজেকে একটি বড় স্মৃতি পেতে পারেন তবে এটি আপনার ভেরিয়েবলের কাছে / কীভাবে আপনার প্রয়োজন তা হস্তান্তর করুন।


5

এটিকে 'হিপ' এর প্রতিশব্দ হিসাবে ভাবেন। সাধারণত, আপনার প্রক্রিয়াটিতে কেবল একটি গাদা / আখড়া রয়েছে এবং সমস্ত মেমোরি বরাদ্দ সেখান থেকে ঘটে।

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

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


5

Http://www.bozemanpass.com/info/linux/malloc/Linux_Heap_Contention.html থেকে :

Libc.so.x ভাগ করা লাইব্রেরিতে glibc উপাদান রয়েছে এবং হিপ কোডটি এর অভ্যন্তরে থাকে। হিপটির বর্তমান বাস্তবায়নে একাধিক স্বতন্ত্র সাব-হ্যাপ ব্যবহার করা হয় যা বলা হয় আর্নাস। সম্মিলন সুরক্ষার জন্য প্রতিটি অঙ্গনের নিজস্ব মিটেক্স রয়েছে। সুতরাং যদি কোনও প্রক্রিয়া'র স্তরের মধ্যে পর্যাপ্ত আখড়া থাকে এবং থ্রেডগুলি বিতরণের একটি প্রক্রিয়া থাকে 'তাদের মধ্যে সমানভাবে অ্যাক্সেস প্রবেশ করে তবে মিউটেক্সগুলির পক্ষে তর্ক করার সম্ভাবনাটি ন্যূনতম হওয়া উচিত। দেখা যাচ্ছে যে এটি বরাদ্দের জন্য ভাল কাজ করে। ম্যালোক () এ, বর্তমান থ্রেডের জন্য বর্তমান টার্গেট অ্যারেনার জন্য মুটেক্সটি বিনামূল্যে (ট্রাইলক) মুক্ত কিনা তা পরীক্ষা করে দেখা হয়। যদি তা হয় তবে এখন আখড়াটি লক হয়ে গেছে এবং বরাদ্দ এগিয়ে চলে। যদি মিউটেক্স ব্যস্ত থাকে তবে প্রতিটি অবশিষ্ট ক্ষেত্রটি ঘুরে দেখার চেষ্টা করা হয় এবং মুটেেক্স ব্যস্ত না হলে ব্যবহৃত হয়। কোনও আখড়া ব্লক না করে লক করা যায় না এমন পরিস্থিতিতে একটি নতুন নতুন অঙ্গনা তৈরি করা হয়। সংজ্ঞা অনুসারে এই অঙ্গনটি ইতিমধ্যে লক করা হয়নি, তাই বরাদ্দ এখন অবরুদ্ধ ছাড়াই এগিয়ে যেতে পারে। শেষ অবধি, থ্রেড দ্বারা সর্বশেষে ব্যবহৃত আখড়ার আইডি থ্রেড স্থানীয় স্টোরেজে ধরে রাখা হয় এবং পরে যখন এই থ্রেড দ্বারা malloc () ডাকা হয় তখন চেষ্টা করার জন্য প্রথম ক্ষেত্র হিসাবে ব্যবহৃত হয়। অতএব malloc () এ সমস্ত কলগুলি অবরুদ্ধ করেই এগিয়ে যাবে।

আপনি এই লিঙ্কটি উল্লেখ করতে পারেন:

http://www.codeproject.com/Articles/44850/Arena-Allocator-DTOR- and- এমবেডড- পূর্বনির্ধারিত- বুফ


4
এফওয়াইআই লিঙ্কগুলি পোস্ট করার সময় আপনার একটি সংক্ষিপ্ত পোস্ট করা উচিত যাতে লিঙ্কযুক্ত নিবন্ধটি চলে যায় তবে আপনার পোস্টটি এখনও কার্যকর।
স্টোনমেটাল

5
এটি মনে হয় bozemanpass.com/info/linux/malloc/Linux_Heap_Contention.html থেকে একটি অনুলিপি-পেস্ট করার সময় দয়া করে আপনার উত্সগুলি ক্রেডিট করার সময় ক্রেডিট করুন।
jscs
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.