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 ის მისამართი.
როგორც ჩანს ინფორმაციას დროებით ტოვებს რაგაც არალეგალურს გავს biggrin.gif
და სტატიკური მეხსიერება და სტეკს ერთიდაიგივე მახასიათებლები არ აქვს? მაგიდომ დავაკავშირე..

Posted by: irakli8 14 Jul 2017, 23:59
syaruna
ეს რომ დაწერო:
CODE

int f(){
 int* i = new int;
 *i = 5;
 return *i;
}

ამ შემთხვევაში კარგავ მისამართს, რაც იმაში გჭირდებოდა რო ეს ახალი აღებული მახსოვრობა გაგეთავისუფლებინა. იმიტორო დინამიურად აღებული მახსოვრობის ფოინთერი თუ დაგეკარგა, სანამ პროგრამა იმუშავებს მანამდე იქნება ეგ მახსოვრობა დაკავებული და საკმარისად ბევრი ეგეთი ცვლადი თუ გქონდა heap-ში ძალიან ბევრ ადგილს დაიკავებს და პროგრამა ან დაიქრაშება ან რამე უფრო ცუდი მოხდება. memory leak ჰქვია ამას.

შენ შემთხვევაში უბრალოდ იღებ ჩვეულებრივი ცვლადი რა მისამართზე ეწერა, ეგ მისამართი არის რიცხვი და ის დაგიბრუნა.

სტატიკური ცვლადები კი სტეკში ხვდება, მაგრამ ჩვეულებრივი სტეკის ცვლადებისგან განსხვავებით, პროგრამის მუშაობის დროს სულ გექნება ეგ მახსოვრობები აღებული. ანუ სქოუფს გარეთ მაშინ გადის როცა პროგრამა ითიშება.

Posted by: syaruna 15 Jul 2017, 00:23
irakli8
გასაგებია მადლობა ახსნისთვის..

Posted by: irakli8 15 Jul 2017, 00:24
syaruna
არაფრის smile.gif
------------

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)