بافر چرخشی: تفاوت میان نسخه‌ها

محتوای حذف‌شده محتوای افزوده‌شده
برچسب‌ها: ویرایش همراه ویرایش از وبگاه همراه
Mmahdim (بحث | مشارکت‌ها)
جزبدون خلاصۀ ویرایش
خط ۱:
[[پرونده:Circular buffer.svg|بندانگشتی|200px|یک حلقه نمایانگر مفهوم بافر چرخشی. این تصویر نشان می‌دهد که بافر چرخشی در حقیقت پایانی ندارد. اگرچه، از آنجایی که از لحاظ فیزیکی حافظه‌ای به صورت حلقه‌ای ساخته نشده، برای تشکیل آن باید مانند پایین یک عملیات خطی انجام گیرد.]]
[[پرونده:Ring buffer.svg|بندانگشتی|200px]]
'''بافِر چرخشی''' {{به انگلیسی|Circular buffer}} یا بافر حلقه‌ای {{به انگلیسی|Ring buffer}} یک [[ساختمان داده]] است که از یک [[حافظه میانگیر]] با حجم ثابت به گونه‌ای استفاده می‌کند که گوییگویا ابتدا و انتهای آن به هم وصل شده‌اند.
این ساختمان در ذخیره کردن [[روانه ی داده]]‌ها (داده‌های درحال دریافت) کمک می‌کند.
 
خط ۵۷:
 
== مشکلات ==
 
=== تمایز بافر پر و خالی ===
 
یک اِشکال کوچک تکیه کردن بر اشاره‌گرها یا شاخص‌های وابسته به ابتدا و انتهای داده این است که در صورتی که بافر کاملاً پر باشد، هر دو اشاره‌گر به یک عنصر اشاره می‌کنند:
 
سطر ۷۵ ⟵ ۷۷:
 
==== باز نگه داشتن همیشگی یک شکاف ====
 
این طرح همواره یک شکاف را تخصیص نیافته باقی می‌گذارد. یک بافر پر نهایتاً <div>(۱ - اندازه) شکاف دارد. اگر هر دو اشاره‌گر به یک شکاف اشاره کنند، آن بافر خالی است. اگر اشاره‌گر انتهایی (write) اشاره کند به شکاف ماقبل شکافی که اشاره‌گر ابتدایی (read) به آن اشاره می‌کرد، بافر پر است.</div>
 
سطر ۸۴ ⟵ ۸۷:
 
==== بهره‌گیری از شمارنده پر شدن ====
 
این روش اشاره‌گر انتهایی را با یک شمارنده که تعداد آیتم‌های قابل خواندن در بافر را نگه می‌دارد، جایگزین می‌کند. این بدون هیچ ابهامی جواب می‌دهد زمانی که بافر پر یا خالی باشد و اجازه استفاده کامل از شکاف‌ها را می‌دهد.
 
سطر ۹۶ ⟵ ۱۰۰:
 
==== معکوس سازی ====
 
یک راه حل دیگر این است که تعداد دفعات بسته شدن هر اشاره‌گر خواندن و نوشتن را به خاطر بسپاریم و با مقایسه آن وضعیت پر یا خالی را تمایز دهیم. در واقع تنها زوج بودن عدد تعداد بسته شدن‌ها تیاز است، بنابراین کافیست که یک بیت اضافه نگه داریم. می‌توانید این را ببیینید مثل این که بافر یک آینه محاری اضافه می‌کند و اشاره‌گرها یا به بافر نرمال و یا به بافر معکوس در آینه اشاره می‌کنند: