გეტყვით პასუხს: მაჩვენებლები!
ოხ, ეს მაჩვენებლები - ყველგანმყოფნი და ყველაფრის მაკონტროლებლები, იდუმალი და ერთდროულად ხმაურიანი არსებები, რომლებიც მოულოდნელად თავს ესხმიან საცოდავ ბაიტებს და მუსრს ავლებენ მათ შიგნეულობას - შლიან, გარდაქმნიან ან ქმნიან მათგან მუტირებულ ურჩხულებს. შემდეგ უკანვე ბრუნდებიან და მსხვერპლის მოლოდინში მყოფი კობრასავით იმალებიან რეგისტრების ანდა უჯრედების უსასრულო ტყეში . . .
ხო, მწერლად ნამდვილად არ ვივარგებ.
ამიტომ, მხატვრული შესავალი გვეყოფა და შევუდგეთ უშუალოდ საქმეს.
განვიხილავთ პროგრამირებაში ერთ-ერთ ყველაზე მნიშვნელოვან და აუცილებელ ობიექტებს, რომლებსაც პოინტერებს(Pointers) ანუ იგივე მაჩვენებლებს უწოდებენ.
ვნახავთ თუ როგორ მუშაობენ მაჩვენებლები როგორც პროგრამირების ენა C++ - ში ასევე Pascal-ში.
მაგრამ, ჯერ სანამ უშუალოდ მათ სინტაქსის მივადგებოდეთ საჭიროა გარკვეული საბაზისო ცოდნა კომპიუტერის Harware-ს შესახებ.
იმდენად, რამდენადაც გადავწყიტე საკითხის გამოწვლილვით განხილვა, მიზეზთა და მიზეზთა გამო ერთ ჯერზე ყველაფერს აქ ვერ დავტევთ და ამიტომაც, რამდენიმე ნომერში მოგვიწევს განაწილება.
მააშ, კარგად მოვეწყოთ, მოვიმარჯვოთ თაგუნია, ჩავახშოთ ყოველგვარი ზედმეტი ხმაურის წყარო, გვერდზე მოვიდგათ რაიმე გამაგრილებელი სასმელი და . . .
წინ! მატრიცაში !!! . . .
პირველი რაც შეგვხვდება ჩვენს ვირტუალურ მოგზაურობაში, ეს არის რეგისტრები და მეხსიერების უჯრედები. ხოლო პროგრამულად მათთან სწორედ მაჩვენებლებს მივყავართ.
რას წარმოადგენს კომპიუტერის მეხსიერება?
ლაპარაკია ოპერატიულ ანუ ელექტრულ ანუ დროებით მეხსიერებაზე. ეს უკანასკნელი ტერმინი(დროებითი) ნიშნავს იმას რომ დისკური მეხსიერებისგან(ვინჩესტერი) განსხვავებით ოპერატიულ მეხსიერებაში ელექტროენერგიის გამორთვის შემდეგ ინფორმაცია იკარგება.
აი, ასე.
ეს მეხსიერება შესდგება ორობითი ელექტრული მოწყობილობების ერთობლიობისაგან, რომელთაც აქვთ ინფორმაციის შენახვის უნარი იმდენ ხანს, სანამ მიკროსქემას ელექტროდენი მიეწოდება.
ჩვენ მას განვიხილავთ პროგრამისტის თვალსაზრისით.
ეს ნიშნავს იმას რომ მეხსიერება შეგვიძლია წარმოვიდგინოთ, როგორც გარკვეული ინფორმაციისტარებისუნარიანი უჯრედებისგან ანუ ბაიტებისგან შემდგარი ბადე. თითოეულ ამ უჯრედს აქვს ორი ძირითადი მახასიათებელი:
1. მისამართი
2. მონაცემი
და ორი ძირითადი თვისება:
1. მასში ინფორმაციის ჩაწერის უნარი
2. მისგან ინფორმაციის ამოკითხვის უნარი
მესამე თვისებად შეგვიძლია დავამატოთ - სიკვდილი, რომელიც დგება მაშინ თუ ჩაქუჩს ჩაარტყავთ მიკროჩიპს.
ეს ჩვენ რა თქმა უნდა არ გვაინტერესებს.
აი, ყველაზე მარტივად ასე შეგვიძლია წარმოვიდგინოთ მეხსიერება:
D (Data) ნიშნავს იმას, რომ მოცემულ უჯრედში ჩაწერილია მონაცემი. ამ უჯრედების რაოდენობა განისაზღვრება მეხსიერების ზომით. მაგალითად, 256 მეგაბაიტი ზომის ოპერატიული მეხსიერება იგივეა რაც დაახლოებით 256 000 000 ბაიტი. დაახლოებით მეთქი იმიტომ ვთქვი რომ 1 კილობაიტი = 1024 ბაიტ-ს და არა 1000 ბაიტს.
მეხსიერების ზომის ერთეულად აღებულია ერთი ბაიტი ანუ რვა ბიტი:
თითოეული ბიტი იღებს ორიდან მხოლოდ ერთ-ერთ მნიშვნელობას 0 ან 1.
ესე იგი მეხსიერების თვითოეული უჯრედი შეგვიძლია წარმოვიდგინოთ ასეთი 8 ბიტიანი რეგისტრების ანუ დამმახსოვრებელი მოწყობილობის სახით, ე.ი D ჩვენს შემთხვევაში ნიშნავს 8 ბიტიან მონაცემს.
ხოლო, რაც შეეხება მონაცემს იგი შეიძლება იყოს სხვა უჯრედის მისამართი, უბრალოდ რიცხვი, ან პროგრამის კოდი. ეს დამოკიდებულია იმაზე თუ მეხსიერების რომელ ნაწილშია იგი მოთავსებული.
ჩვენთვის საკმარისია უჯრედის მისამართის ცოდნა, რათა შევძლოთ მისი სურვილისამებრ გამოყენება - ინფორმაციის შეტანა/გამოტანა.
მოდით ამჯერად ეს ვიკმაროთ.
წინ კიდევ გველის მოგზაურობა მისამართთა არითმეტიკის სამყაროში. ვნახავთ, რომ სანამ მაჩვენებელს გამოვიყენებდეთ საჭიროა იგი შევამოწმოთ იმაში თუ სად აპირებს შეტევის განხორციელებას.
ხომ გეცნობათ სიტყვები:
“. . . სხვანაირად ადამიანს ვერ ამოიცნობ, თუ მასთან არ იბრძოლებ . . .”
ვნახავთ რას ნიშნავს ჩვენთან სიტყვა “იბრძოლებ”.
აი, სულ ეს იყო . . .
რეზიუმე
რეზიუმე ბოლოს!
ავტორი: გიორგი ბაწაშვილი (G3B)
აღდგენილია სტატიის საწყისი ვარიანტი