Değişken, bir algoritmanın amacına giden mantıksal bir yapıdır, oysa bir bellek konumu bir bilgisayarın çalışmasını tanımlayan fiziksel bir yapıdır. Genel olarak konuşursak, bir programı yürütmek için bir değişkenin mantıksal kavramı ile bilgisayarın depolanması arasında (derleyici oluşturulmuş) haritalama vardır.
(Assembly dilinde bile, algoritmada ve kasıtta olacak (mantıksal) değişkenler kavramına ve (fiziksel) bellek konumlarına, montajda daha fazla karışmış olmalarına rağmen.)
Değişken yüksek (er) seviye bir kavramdır. Bir değişken ya bilinmeyen (matematikte olduğu gibi, ya da programlama ödevinde) ya da bir değerle ikame edilebilecek bir yer tutucuyu temsil eder (programlamada olduğu gibi: parametreler).
Bir hafıza yeri düşük (er) seviye bir konsepttir. Bir bellek konumu, bazen bir değişkenin değerini kaydetmek için bir değeri saklamak için kullanılabilir. Bununla birlikte, bir CPU kaydı bazı değişkenlerin değerini saklamanın başka bir yoludur. CPU kayıtları da düşük (er) seviye depolama yerleridir, ancak adresleri olmadığı için hafıza yerleri değildirler, sadece isimleri.
Bir anlamda, bir değişken programın amacını ifade etmek için bir soyutlama mekanizmasıdır, oysa bir bellek konumu depolama ve geri alma sağlayan işlem ortamının fiziksel bir varlığıdır.
Soru 003: Bir işaretçinin 0x23452 bellek konumuna kaydedildiği doğru mu? Neden?
Kesin olarak söyleyemeyiz. Bir adres olarak çalışacak bir değer olduğu için, o adres olduğu anlamına gelmez, bunun yerine 144466 tamsayı olabilir. Değerlerin yorumlanmasına sadece sayısal olarak nasıl göründüklerine dayanarak varsayımlarda bulunamayız.
Soru 004: Bir işaretçinin 0x23452 bellek konumuna kaydedildiği doğru mu? Neden?
Bu gerçekten garip bir soru. Ancak, kutulara dayanarak bazı varsayımlar bekliyorlar, ancak adreslerin her kutu için 1 arttığını not edelim. Herhangi bir modern bilgisayarda, bu her kutunun bir bayt bayt adreslenebilirliğine sahip olabileceği anlamına gelir, on yıllardır norm olmuştur. Bununla birlikte, bir bayt sadece 8 bittir ve 0 ila 255 arasında değişebilir (işaretsiz değerler için); Ancak bu adreslerden birinde depolanan çok daha büyük bir değer gösterirler, bu yüzden çok şüpheli. (Bu, bir kelime adresli makine olsaydı işe yarayabilirdi, ama söylemedi, ve bugün birkaç makine olsa da, bazı eğitim makineleri öyle.)
Hepinize gösterdiğim dört karttan yola çıkarak, işaretçileri biraz farklı şekilde tanımlardım:
İşaretçi, değeri başka bir bellek konumunun bellek adresi olan bir bellek konumudur.
Bu düşüncenin doğru olduğu durumlar varken, burada metaforları karıştırıyorsunuz. Bir değişken kavramı, algoritmaya ve amacına gider - tüm değişkenlerin bellek konumlarına sahip olduğunu varsaymaya gerek yoktur. Bazı değişkenler (özellikle diziler) bellek konumlarına sahiptir, çünkü bellek yerleri adreslemeyi destekler (oysa CPU kayıtları sadece indekslenmemiş olabilir).
Yürütme için değişkenler ve ifadeler ile işlemci belleği konumları ve işlemci talimat dizileri arasında mantıksal bir haritalama vardır. Değeri asla değişmeyen (örneğin bir sabit) bir değişken, mutlaka bir hafıza konumu gerektirmez, çünkü değer istendiğinde yeniden üretilebilir (örneğin, derleyici tarafından üretilen kod dizileri için gerektiği gibi).
a
,0x23453
.nil
vb onların içindeki şeyler değerlerdir. Bu size açık gelebilir, ancak bu alanların nasıl tanımlandığını görmeden bu sorulara kesin cevaplar vermekten rahat edemem.a
İkinci resimde bir karakter, bir dize (eğer farklıysa) veya bir değişkenin ismi olup olmadığını bilmenin hiçbir yolu yoktur . Bir dize ise, o zamannil
da bir dizedir? Ya da "boş" bir değer?