Printable Version of Topic
Click here to view this topic in its original format |
თბილისის ფორუმი > Hello World > მეხსიერება Stack |
Posted by: syaruna 14 Jul 2017, 20:24 |
#include<iostream> using namespace std; int *f1() { int c1 = 20; return &c1; } int main() { int *x=NULL; x = f1(); cout << "Stack---" <<*x << endl; return 0; } steck-ის მეხსიერებიდან გამომდინარე ფ1 ფუნქცია იშლება სტატიკური მეხსიერებიდან მაგრამ კომპილატორი მაინც მიბრუნებს ფუნქციის მნიშვლენობას და გამომაქვს მეინში შესაბამისად ამ მნიშვნელით სრულიად შესაძლებელია ოპერირება რატომ ხდება ასე? |
Posted by: irakli8 14 Jul 2017, 22:05 |
წაშლით ის არ იგულისხმება, რომ იმ მისამართზე აღარაფერი იქნება ჩაწერილი, უბრალოდ იმას ნიშნავს რომ გათავისუფლდა ეგ მახსოვრობა და სტეკზე სხვა რაღაცას შეუძლია რომ დაიკავოს, როგორც აქ. ჰოდა სტატიკურ მეხსიერებას თუ სტეკის მეხსიერებას ეძახი, იგივე არაა. |
Posted by: syaruna 14 Jul 2017, 22:26 |
irakli8 მახსოვრობა თუ გათავისუფლდა ფუნქციიდან გამოსვლის დროს ესეიგი მისამართიც წაიშალა *X მა წესით არ უნდა მიიგოს с1 ის მისამართი. როგორც ჩანს ინფორმაციას დროებით ტოვებს რაგაც არალეგალურს გავს და სტატიკური მეხსიერება და სტეკს ერთიდაიგივე მახასიათებლები არ აქვს? მაგიდომ დავაკავშირე.. |
Posted by: irakli8 14 Jul 2017, 23:59 | ||
syaruna ეს რომ დაწერო:
ამ შემთხვევაში კარგავ მისამართს, რაც იმაში გჭირდებოდა რო ეს ახალი აღებული მახსოვრობა გაგეთავისუფლებინა. იმიტორო დინამიურად აღებული მახსოვრობის ფოინთერი თუ დაგეკარგა, სანამ პროგრამა იმუშავებს მანამდე იქნება ეგ მახსოვრობა დაკავებული და საკმარისად ბევრი ეგეთი ცვლადი თუ გქონდა heap-ში ძალიან ბევრ ადგილს დაიკავებს და პროგრამა ან დაიქრაშება ან რამე უფრო ცუდი მოხდება. memory leak ჰქვია ამას. შენ შემთხვევაში უბრალოდ იღებ ჩვეულებრივი ცვლადი რა მისამართზე ეწერა, ეგ მისამართი არის რიცხვი და ის დაგიბრუნა. სტატიკური ცვლადები კი სტეკში ხვდება, მაგრამ ჩვეულებრივი სტეკის ცვლადებისგან განსხვავებით, პროგრამის მუშაობის დროს სულ გექნება ეგ მახსოვრობები აღებული. ანუ სქოუფს გარეთ მაშინ გადის როცა პროგრამა ითიშება. |
Posted by: syaruna 15 Jul 2017, 00:23 |
irakli8 გასაგებია მადლობა ახსნისთვის.. |
Posted by: irakli8 15 Jul 2017, 00:24 |
syaruna არაფრის ------------ |