PDA

View Full Version : تفاوت مدیریت حافضه در ویندوز و لینوکس



behnia_k
جمعه 08 بهمن 1395, 13:20 عصر
من برنامه ای دارم که بطور تصادقی بر اساس پیام دریافتی از سوکتها و یا بر اساس گذشت زمان خاصی اقدام به گرفتن حافضه با دستور new کرده و اشاره گر آن را در QList نگه میدارد ضمنا ممکن است اشاره گر را از لیست کرقته و از آن استقاده کزده و در انتها آنها را از لیست حذق و حافضه را آزاد میکند.
این برنامه با Qt 2 روی لینوکس مشکلی ندارد ولی با Windows Xp و VC6 و Qt 3.3.4 و یا Qt 3.3.2 هر چند وقت یکباره هنگام حذف از لست دچار مشگل شده و سیستم متوقف میشود و به ظاهر هیپ خراب شده و گاهی خطاهای دیگری که ینظر خرابی حافضه است نمایش میدهد.
کسی با این موضوغ برخورد کرده و یا راه حلی برای آن دارد.

pswin.pooya
چهارشنبه 13 بهمن 1395, 19:10 عصر
gcc یکسری امکانات برای مدیریت حافظه دینامیک داره که در استاندارد C++ نیستن. اینها بطور کلی عمده ترین تفاوت ها هست (حداقل توی حوظه هیپ). اما خب از اونجا که شما با QList کار می کنید این نمی تونه موردتون باشه مگر اینکه اشاره گرها رو جایی دستکاری می کنید و یا اینکه overflow یک آرایه رو داشته باشید.

یه مورد دیگه هم epilogue و prologue هست که توی ویژوال استادیو استاندارد نیستن. (برای افزایش سرعت). اگر برنامه شما به شکلی با اونها کار می کنه می تونه به مشکل بر بخوره.

برای اینکه این موارد رو چک کنید بهینه سازی های کامپایلر رو غیرفعال کنید و بعد تست بگیرید. اگر مشکل ادامه داشت، مشکل به احتمال زیاد از کد شما هست تا موارد دیگه