হাতের দ্বারা
যদি মেমরিটি খুব কম ছড়িয়ে যায় না তবে আমি বড় অংশগুলিতে কাজ করার বিষয়টি বিবেচনা করি।
এখানে কিছু সিডো-কোড দেওয়া আছে।
class Chunk {
Chunk new(int size) {...}
void setPixel(int x, int y, int value) {...}
int getPixel(int x, int y) {...}
}
class Grid {
Map<int, Map<Chunk>> chunks;
Grid new(int chunkSize) {...}
void setPixel(int x, int y, int value) {
getChunk(x,y).setPixel(x % chunkSize, y % chunkSize, value);//actually the modulo could be right in Chunk::setPixel and getPixel for more safety
}
int getPixel(int x, int y) { /*along the lines of setPixel*/ }
private Chunk getChunk(int x, int y) {
x /= chunkSize;
y /= chunkSize;
Map<Chunk> row = chunks.get(y);
if (row == null) chunks.set(y, row = new Map<Chunk>());
Chunk ret = row.get(x);
if (ret == null) row.set(x, ret = new Chunk(chunkSize));
return ret;
}
}
এই বাস্তবায়ন বেশ নিষ্পাপ।
একটির জন্য, এটি গেটপিক্সেলগুলিতে খণ্ডগুলি তৈরি করে (মূলত এটি 0 বা তাই ফিরে আসা ভাল হবে, যদি কোনও অবস্থার জন্য এই অংশটির জন্য সংজ্ঞা দেওয়া হয়নি)। দ্বিতীয়ত এটি অনুমানের উপর ভিত্তি করে তৈরি করা হয়েছে যে আপনার কাছে মানচিত্রের যথেষ্ট দ্রুত এবং স্কেলযোগ্য বাস্তবায়ন রয়েছে। আমার জ্ঞান অনুসারে প্রতিটি শালীন ভাষার একটি রয়েছে
এছাড়াও আপনাকে খণ্ড আকারের সাথে খেলতে হবে। ঘন বিটম্যাপের জন্য, একটি বড় অংশের আকার ভাল, বিরল বিটম্যাপের জন্য একটি ছোট অংশের আকার আরও ভাল। প্রকৃতপক্ষে খুব অল্প সংখ্যক লোকের ক্ষেত্রে, "অংশের আকার" 1 সবচেয়ে ভাল, "খণ্ডগুলি" নিজেকে অপ্রচলিত করে এবং পিক্সেলের কোনও মানচিত্রের একটি মানচিত্রে ডেটা কাঠামো হ্রাস করে।
বালুচর বন্ধ
অন্য সমাধান হতে পারে কিছু গ্রাফিক লাইব্রেরি তাকান। তারা একটিতে 2D বাফার আঁকতে আসলে বেশ ভাল। এর অর্থ হ'ল আপনি কেবল একটি বৃহত্তর বাফার বরাদ্দ করতে পারেন এবং সেই অনুযায়ী স্থানাঙ্কগুলিতে এটিতে মূলটি আঁকেন।
একটি সাধারণ কৌশল হিসাবে: যখন "গতিশীলভাবে ক্রমবর্ধমান মেমরি ব্লক" থাকে, এটি ব্যবহার হয়ে গেলে এটির একাধিক বরাদ্দ করা ভাল ধারণা। এটি বরং স্মৃতি তীব্র, তবে বরাদ্দ এবং অনুলিপি ব্যয়কে উল্লেখযোগ্যভাবে হ্রাস করে । বেশিরভাগ ভেক্টর বাস্তবায়নগুলি তার আকার দ্বিগুণ হওয়ার পরে বরাদ্দ দেয়। সুতরাং বিশেষত আপনি যদি অফ-দ্য শেল্ফ সমাধানটি নিয়ে যান তবে আপনাকে কেবল 1 পিক্সেল দ্বারা বাফার বাড়িয়ে দেবেন না, কারণ কেবল একটি পিক্সেল অনুরোধ করা হয়েছিল। বরাদ্দ মেমরি সস্তা। পুনর্নির্মাণ, অনুলিপি এবং মুক্তি ব্যয়বহুল।