 بسم اللہ الرحمن الرحیم آج ہم موڈیول 66 دیسکا سکریں گے موڈیول 66 ہے مانجنگ ہیپ میمری پریویس لی ہم نے دیکھا تھا کہ ہم ایک ہیپ کا سٹرکچر یا آبجکت جو ہے وہ وندوز کے اندر کیسے کریٹ کریں گے وانس وہ آبجکت کریٹ ہو جاتا ہے اس کا مطلب یہ نہیں ہے کہ میمری آلوکیٹ ہوگی ہے یا اب آپ کو میمری ایکسیس بھل ہے اس کا صرف صرف اتنا یہ مطلب ہے کہ وہ وندوز کے اندر ایک سٹرکچر کریٹ ہوگیا ہے جس سٹرکچر کے طرف آپ دینامک میمری آلوکیشن کر سکتے ہیں ایک آبجکت آپ کو مل گیا جس کا کے حنڈل آپ کو اس نے ڈرٹن کیا اب اس حنڈل کے طرف آپ چاہئے تو میمری آلوکیٹ کر سکتے ہیں ایسا کرنے کے لیے پھر ایک مزید ایک سیٹ آف ایپیائیز ہیں جن کا استعمال کیا جاتا ہے once اگر آپ نے ایک ہیپ کریٹ کر لیا اب اس ہیپ کے حنڈل آپ use کریں گے اور اس حنڈل کو پورس کریں گے into different API's جو کہ آپ کو ہیپ کے لیے میمری آلوکیشن پرفوم کر کے دیں گی جس میں سے ایک API ہے ہیپ آلوک اور دوسری ہے ہیپ ری آلوک ان دنوں API's کو اب ہم دیسکس کریں گے ہیپ آلوک کے اندر آپ دیکھ سکتے ہیں کہ 3 پیرامیٹرز ہیں پہلہ پیرامیٹرز وہ ہیپ کے حنڈل ہے once جو آپ نے ہیپ کریٹ کیا ہے اس کا حنڈل آپ سپیسفائے کریں گے دوسرا وہ فلاگز ہیں پریویسلی جس طرح آپ نے ہیپ کو کریٹ کرتے وقت بھی فلاگز use کیا تھے اور تیسرہ وہ number of bytes ہے اور bytes کے لیے آپ دیکھیں گے size t size t کی type use کیا ہے for compatibility تاکہ آپ کا جو program وہ win32 کے لیے بھی work کر سکے اور win64 کے لے بھی work کر سکے دیو فلاگز وہ آپ نے پہلے ہیپ کریٹ کیا تھے اس کے اندر یہ فلاگ ہے ہیپ generate exceptions یہ بالکل اسی طرح ہیں جس طرح آپ نے ہیپ کریٹ کے اندر use کیا تھا اس کا مطلب ہے کہ اگر ہیپ کریٹ کرتے وقت کسی کسم کا کوئی exception اگر آتی ہے کوئی ایرر آتا اس صورت میں exception raise ہوگی ہیپ no serialize یہ اسی طرح سے performance کو improve کرنے کے لیے use ہوتا ہے اس کے علاوہ ایک اور فلاگ ہم یہاں پر دیکھ سکتے ہیں ہیپ zero memory ہیپ zero memory کا اگر آپ فلاگ سیٹ کرتے ہیں تو اس کا مطلب ہے جو memory allocate ہوگی وہ initialize ہوگی by zero اگر یہ نہیں آپ use کرتے تو وہ garbage کے ساتھ initialize ہوتی ہے جو بھی garbage values اس وقت ہیپ کے اندر پڑی میں جو size ہے کہ کتناہ کتنی آپ memory allocations کر سکتے ہیں وہ آپ نے خود specify کرنے لیکن یہ size جو ہے یہ exceed نہیں کر سکتا beyond 0.5 MB یعنی کہ is 7FFF8 in hags اتنے number of bytes جو ہے وہ آپ maximum specify کر سکتے ہیں DW bytes کے اندر تو جو ایک block allocate ہوگا وہ اس کا size 0.5 MB سے exceed نہیں کرے گا اور جو اس کی return value ہے اس function کی وہ آپ دیکھیں lp void long pointer to void ایک long pointer return ہوگا اور یہ وہ location ہوگی جاں پہ یہ memory block allocate ہوئے آپ اپنے کسی point type کے اندر اس کو store کر کے پھر اس کے پر جو بھی آپ نے operations perform کرنے اس memory area کے اندر جو بھی چیزیں store کرنے ہیں اس کو آپ use کر سکتے ہیں اگر آپ اس API کو use کرنے اور آپ نے heap generate exception جو ہے flag set کیا ہے اور اس کے اس میں اگر exception اکر ہوتی ہے تو اس کی دو ہی وجہ ہو سکتے ہیں ایک status no memory یعنی کہ memory available نہیں ہے مزید اور status access violation access violation یہ ہے کہ beyond جو bounds ہے اس کو memory کو access کرنے کی کوشش کیا ہے جو بھی اس کے access rights ہے اگر ڈیٹا ہے تو اس کو as code access کرنے کی کوشش کیا ہے تو یہ دو کسم کے جو exceptions ہے وہ اکر ہو سکتے ہیں اگر exception flag جو heap generate exception flag ہے یہ سیٹنی کیا ہوا اس کے اس میں جو heap allow کا function ہے وہ آپ کو null return کرتا ہے اگر null return کرتا ہے تو اس کا مطلب ہے failure ہوا اگر تو successful ہوتا تو وہ آپ کو point return کرتا ہے جو کہ non-null value ہے اگر ان case of failure آپ کو یہ null return کرتا ہے اور get lost error کا function previously used کیا گیا ہے ڈیٹا کرنے کے لیے وہ یہاں پر work نہیں کرتا ہے ایک ہے لیکن null return ہوتا تو اس کا مطلب ہے کسی کسم کا memory error آیا جس وجہ سے ڈیٹا نہیں ہو سکی اسی طرح اس کا بالکل opposite function ہے that is heap free heap alloc جو تھا memory allocation کرتا تھا heap free جو ہے وہ heap میں سے memory deallocate کرے گا جس heap میں سے memory آپ نے deallocate کرنے اس کا آپ handle specify کریں گے اس کے ساتھ آپ flag specify کریں گے اور address specify کریں گے کہ کس address سے آپ نے memory deallocate کرنے گا جو third pointer ہے وہ آپ دیکھ سکتے ہیں lp void ہے third parameter ہے وہ lp void ہے this is the location of the address جہاں سے آپ نے کی memory deallocate کرنے گا جو flags ہے وہ یا تو zero ہوتے ہیں یا پھر اس کی value یہاں پہ heap no serialize ہو سکتی ہے اور lp mem جو ہے یہ کیا ہوگا یہ وہ address ہوگا جو previously آپ کو return ہوا تھا heap alloc کے result میں اور in case failure ہوتا ہے یہ deallocate نہیں کر پاتا کسی بھی وجہ سے memory تو آپ کو false return ہوتا دیکھیں اس کی return type bool ہے true return ہوگا in case it is successful false return ہوگا in case it is a failure a failure کی case میں آپ کو false return ہوگا اسی طرح سے heap real loc کا function ہے ایک memory allocate ہوگی ہے اب آپ نے اگر اسی location کے پر مزید memory alloc کرنی ہے یا اس memory alloc کو آپ نے کم کرنے یا زادہ کرنے تو آپ heap real loc کا function جو ہے وہ use کر سکتے ہیں heap real loc سب سے پہلے heap کا parameter heap کا handle لے گا دوسرہ پھر وہ flags لیتا ہے تیسرہ وہ memory location لیتا ہے اور اب یہ نیا size DW bytes کے اندر وہ نیا size لے گا DW flags کی value کیا ہو سکتی heap generate exception ہو سکتی heap no serialize ہو سکتی ہے وہ جس طرح آپ نے heap loc کے اندر use کیا اس کے علاوہ heap zero memory بھی ہو سکتی ہے heap real loc in place only یعنی کہ اگر آپ heap کی real loc کرتے ہیں تو اس case کے اندر ہو سکتے ہیں کہ وہی آپ کو address return ہو جس پر previous allocation ہی تھی یا نیا address بھی return ہو سکتا ایدر آپ نے in place only اگر کی option set کیا تو آپ کو یہ ہر سورت وہ previous address ہی return کرے گا آپ کو نیا address return نہیں کر سکتا heap zero memory کا مطلب یہ ہے کہ جو نہیں اگر آپ نے 1x number of bytes allocate کیا تھے previously اس سے زادہ کچھ اور bytes اگر آپ نے allocate کرنےہا تو وہ جو new bytes allocate ہوں کے وہاں پہ یہ zeros place کرے گا اگر heap zero memory کا آپ نے option set کیا ہے lp mem جو ہے وہ آپ کا pointer ہے اس location کا جو previously allocated کیا previously allocated کیسے ہوئی تھی وہ آپ نے heap loc کے function سے پہلے allocate کیا ہوگی اور DW bytes جو ہے وہ آپ کا size ہے یہ size again وہی 7ff8 سے exceed نہیں کر سکتا یہ size جو previous allocation ہے اسے بڑا بھی آپ سپیسفائے کر سکتے ہیں اسے چھوٹا بھی سپیسفائے کر سکتے ہیں لیکن بہت سے کیسے یہ 7ff8 سے exceed نہیں کر سکتا