ايران ويج

نسخه‌ی کامل: تخصیص حافظه و پاک کردن آن در سی
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
#include <iostream.h>
#include <conio.h>

inline float cube(const float s) { return s * s * s; }

int main()
{

cout << "enter the side length of ur cube: ";
float side;
cin >> side;



cout << "volume of cube with side "
<< side << " is " << cube( side ) << endl;

cout << "the adress of cube is:" << &cube << endl;

getch();



return 0;

}




0x0401019
این عدد آدرس حافظه ای است که به تابع cube داده میشود
چطور میشه این تابع رو از این محل به محلی دیگر انتقال داد
یا محتوای این آدرسس رو پاک کرد.

راستی ویژوال سی چطوری به این تابع آدرس می دهد یا اصلا
آدرس حافظه چیه؟
چطور میشه فهمید مثلا در فلان آدرس چه برنامه ای است یا
چه تایع یا متغیری ذخیره شده است.[/align]
البته این تابع به شکل inline تعریف شده و از نظر ساختار مثل ماکرو ها عمل میکنه . من خودم واقعا نمیدونم که الان این آدرس داده شده آدرس کجاست اما شک دارم آدرس تابع باشه . در واقع تابع inline کلا تابع نیست و مفهوم تابع معمولی رو نداره . فکر کنم بستگی به کامپایلر داشته باشه و نحوه عملکردش در اینجور موقعیت ها . متاسفانه من از ساختار درونی کامپایلر ++C اطلاعات ندارم .

کلا آدرس دهی اولیه توسط کامپایلر انجام میشه . بعد Loader سیستم عامل وظیفه داره که هنگام لود شدن برنامه آدرس ها رو نسبت به حافظه و وضعیت اون تنظیم کنه .
وقتی داریم در مورد برنامه اجرایی صحبت میکنم داریم در مورد کد ماشین صحبت می کنیم و متعیر و اسم و اینها مفهومی نداره و همش آدرس و عدده .
اکثر این تبدیلات هم بر عهده کامپایلره . البته راههای مختلفی وجود دارند که میشه ازشون استفاده کرد و متوجه شد در فلان آدرس چه چیزی هست . مثلا تبدیل کد ماشین به سورس اسمبلی و بررسی کد در زمان اجرا به کمک Debugger ها . ( شبیه همون کاری که کراکر ها می کنن )
حالا تابع کیوب اگه این لاین هم نباشه یک آدرس دیگه میده
من میخام بدونم که با چه دستوراتی میشه محتوای حافظه رو
ویرایش کرد یا پاک کرد، از این جور چیزها دیگه.
توی کتابخونه C با یکسری تابع میشه یک ارهایی کرد مثل memcpy . برای اطلاعات بیشتر میتونی به http://www.cplusplus.com/reference/clibrary/cstring/ مراجعه کنی . کار با حافظه در برنامه های تحت ویندوز هم به کمک توابع API انجام میشه .
محمد جان دستت درد نکنه واقعا سایت خوبی معرفی کردی
من حتی به یکسری چیزای دیگه ای که می خواستم رسیدم.