@Programmer, hafızayı gerçekten anlıyor musunuz?

Yazar | cxuan

Editör | Liu Jing

Hepimiz bilgisayarın verileri işleyen bir cihaz olduğunu ve verinin ana depolama yerinin disk ve bellek olduğunu biliyoruz.Programcılar için CPU ve bellek anlamamız gereken iki fiziksel yapıdır.Yüksek seviyeli programlara giden yoldur. Üyeler çok önemli köprülerdir, bu nedenle bu yazıda temel hafıza bilgisini tanıtacağız.

Hafıza nedir

Bellek (Bellek) bilgisayarın en önemli parçalarından biridir, program ile CPU arasındaki köprüdür. Bilgisayardaki tüm programlar hafızada çalışır, bu nedenle hafızanın bilgisayarda büyük etkisi vardır Hafıza aynı zamanda ana hafıza olarak da adlandırılır.İşlevi, hesaplama verilerini CPU'da saklamak ve sabit diskler gibi harici depolama cihazlarıyla değiş tokuş etmektir. veri. Bilgisayar çalıştığı sürece CPU hesaplanması gereken veriyi hesaplama için ana belleğe aktaracaktır Hesaplama tamamlandığında CPU sonucu iletecektir Ana belleğin çalışması ayrıca bilgisayarın kararlı çalışmasını da belirler.

Hafızanın fiziksel yapısı

Bir şeyi anlamadan önce, bir izlenim ve anlayışa ilgi duymadan önce onu görmüş olmalısınız, bu yüzden önce belleğin ne olduğuna ve fiziksel yapısının ne olduğuna bakmalıyız.

Hafızanın dahili hafızası çeşitli IC devrelerinden oluşur. Tipleri çok büyüktür, ancak esas olarak üç tip hafızaya bölünmüştür.

  • Rasgele Erişim Belleği (RAM): En önemli bellek türü, yani verilerin okunabileceği ve yazılabileceği anlamına gelir. Makine kapatıldığında hafızadaki bilgiler kaybolacaktır.

  • Salt okunur bellek (ROM): ROM genellikle yalnızca verileri okumak için kullanılabilir ve veri yazamaz, ancak makine kapatıldığında bu veriler kaybolmaz.

  • Önbellek (Önbellek): Önbellek de sıklıkla gördüğümüz şeydir, birinci seviye önbellek (L1 Önbellek), ikinci seviye önbellek (L2 Önbellek), üçüncü seviye önbellek (L3 Önbellek) bu veriler, hafıza ile CPU arasında yer alır. , Hafızadan daha hızlı okuyan ve yazan bir hafızadır. CPU verileri belleğe yazdığında, veriler de önbelleğe yazılır. CPU'nun veriyi okuması gerektiğinde, onu doğrudan önbellekten okuyacaktır.Elbette gerekli veri önbellekte değilse, CPU hafızadaki verileri tekrar okuyacaktır.

Hafıza IC tam bir yapıdır.Ayrıca güç, adres sinyalleri, veri sinyalleri, kontrol sinyalleri ve verileri okumak ve yazmak için adresleme için IC pinlerine sahiptir. Aşağıda sanal bir IC pin diyagramı verilmiştir

Şekilde, VCC ve GND güç kaynağını temsil eder, A0-A9 adres sinyali pinleridir, D0-D7 kontrol sinyallerini temsil eder, RD ve WR iyi kontrol sinyalleridir, onları farklı renklerle ayırdım ve güç kaynağını VCC'ye bağladım GND'ye bağlandıktan sonra 0 ve 1 sinyalleri diğer pinlere iletilebilir.Çoğu durumda + 5V 1 ve 0V 0 anlamına gelir.

Hepimiz hafızanın verileri depolamak için kullanıldığını biliyoruz, bu nedenle bu hafıza IC'de ne kadar veri saklanabilir? D0-D7, veri sinyallerini temsil eder, yani 8 bit = 1 bayt veri bir seferde girilebilir ve çıkarılabilir. A0-A9, toplam on adres sinyalidir, yani 10 = 1024 adres gücüne toplam 0000000000-1111111111 belirtilebilir. Her adres 1 bayt veri depolayacaktır, böylece bellek IC'nin kapasitesinin 1 KB olduğu sonucuna varabiliriz.

512 MB bellek kullanıyorsak, bu 512000 (512 * 1000) bellek IC'sine eşdeğerdir. Elbette, bir bilgisayarın bu kadar çok bellek IC'sine sahip olma olasılığı düşüktür, ancak normal şartlar altında, bir bellek IC daha fazla pime sahiptir ve daha fazla veri depolayabilir.

Bellek okuma ve yazma süreci

Koyalım Dikkat Verileri okumak ve yazmak için bellek IC'sine tıklayın! Bellek IC'ye veri yazmak ve okumak için bir modele bakalım

Bu süreci detaylı olarak anlatalım. Hafıza IC'ye 1 baytlık veri yazmak istersek, süreç şu şekildedir:

  • Önce + 5V güç kaynağını VCC'ye bağlayın, 0V güç kaynağını GND'ye bağlayın, verilerin saklama konumunu belirlemek için A0-A9'u kullanın, ardından veri değerini D0-D7'nin veri sinyaline girin ve WR yazın (yazın) Değeri 1 olarak ayarlanmıştır, bu işlemleri yaptıktan sonra bellek IC'ye veri yazabilirsiniz.

  • Verileri okurken, yalnızca A0-A9 adres sinyalleri aracılığıyla verilerin saklama konumunu belirlemeniz ve ardından RD değerini 1 olarak ayarlamanız gerekir.

  • Şekildeki RD ve WR, kontrol sinyalleri olarak da adlandırılır. WR ve RD'nin ikisi de 0 olduğunda, yazma ve okuma işlemleri gerçekleştirilemez.

Gerçekçi bellek modeli

Hafızayı kolaylaştırmak için hafıza modelini gerçek dünya modelimizle eşleştiriyoruz.Gerçek dünyada hafıza modeli, içinde yaşadığımız binaya çok benziyor. Bu binada birinci kat bir bayt veri depolayabilir ve kat numarası adresidir.Aşağıda hafıza ve kat entegrasyonunun model diyagramıdır.

Programdaki verilerin sadece sayısal değil, aynı zamanda veri türü kavramı da olduğunu biliyoruz Hafıza açısından, kullanılan hafızanın boyutu (işgal edilen kat sayısı) anlamına gelir. Hafızadaki verileri fiziksel olarak 1 byte'lık birimler halinde okumaya ve yazmaya zorlansa bile, programda, veri tipini belirterek, belirli bir bayt sayısında okuma ve yazma yapmak mümkündür.

Aşağıda, talimat baytlarını okumak ve yazmak için örnek olarak belirli sayıda bayt alan bir program örneği verilmiştir.

// değişkenleri tanımla char a; kısa b; uzun c; // değişken atama a = 123; b = 123; c = 123;

Sırasıyla a, b ve c olmak üzere üç değişken tanımladık ve her değişkene aynı 123'ü atadık.Bu üç değişken belirli bir bellek alanını temsil ediyor. Değişkenler aracılığıyla, fiziksel adresi belirtmeseniz bile, okuma ve yazma işlemlerini doğrudan tamamlayabilirsiniz ve işletim sistemi değişkenler için otomatik olarak bellek adresleri tahsis eder.

Bu üç değişken sırasıyla 1 bayt uzunluğunda bir kısa karakter, 2 bayt uzunluğunda bir kısa ve 4 bayt uzunluğunda bir uzun karakteri temsil eder. Bu nedenle, veri 123 olmasına rağmen, depolamanın hafıza boyutu aynı değildir. Aşağıdaki gibi

Buradaki 123, her türün maksimum uzunluğunu aşmaz, bu nedenle kısa ve uzun türlerin kapladığı diğer bellek alanı için ayrılan değer 0'dır. Burada depolamak için düşük bayt dizisini kullanıyoruz

Düşük bayt dizisi: Düşük veri bitini belleğin düşük adresinde saklayın.

Yüksek bayt dizisi: Bellek konumunda yüksek veri bitlerini saklama yöntemine yüksek bayt dizisi denir.

Hafıza kullanımı

Işaretçi

İşaretçi C dilinin çok önemli bir özelliğidir, işaretçi de bir çeşit değişkendir, ancak temsil ettiği şey verinin değeri değil, belleğin adresidir. İşaretçiler kullanılarak herhangi bir hafıza adresindeki veriler okunabilir ve yazılabilir.

İşaretçi okuma ve yazma sürecini anlamadan önce, önce bir işaretçiyi nasıl tanımlayacağımızı anlamamız gerekir.Sıradan değişkenlerin aksine, bir işaretçi tanımlarken, genellikle değişken adının önüne bir * ekleriz. Örneğin, aşağıdaki değişkenleri tanımlamak için işaretçiler kullanabiliriz

char * d; // işaretçi d karakter türünün tanımı short * e; // kısa tip tanımının e işaretçisi long * f; // uzun tip göstericinin tanımı f

Örnek olarak 32 bitlik bir bilgisayarı ele alalım 32 bitlik bir bilgisayarın bellek adresi 4 bayttır, bu durumda işaretçinin uzunluğu da 32 bittir. Bununla birlikte, d e f değişkeni farklı bir bayt uzunluğunu temsil eder. Neden?

Aslında, bu veriler bir seferde bellekten okunan bayt sayısını temsil eder.Örneğin, def değeri 100'dür. Char türünü kullanırken bellekten 1 bayt veri okuyabilir ve yazabilirsiniz.Hafızadan veri okumak ve yazmak için kısa türü kullanın. Bellek 2 baytlık veriyi okur ve yazar, 4 baytlık veriyi uzun süre okuyabilir ve yazabilir, aşağıdaki tam bir tip bayt tablosudur

Bu okuma ve yazma sürecini anlatmak için bir resim kullanabiliriz

Dizi hafızanın gerçekleşmesidir

Dizi, birden çok özdeş veri türünün bellekte art arda düzenlendiği bir formu ifade eder. Bir dizi öğesi olarak her veri, belirtilen dizinin öğelerini okuyup yazabilmeniz için bir indeks olarak da adlandırılan bir alt simge numarasıyla ayırt edilir.

İlk olarak, önce diziyi tanıyalım. Diziyi tanımlamak için hala char, short ve long olmak üzere üç öğe kullanıyoruz. Dizinin öğeleri ile genişletilir ve içindeki değer, aşağıdaki tanım gibi dizinin uzunluğunu temsil eder

char g; kısa h; uzun i;

Dizi tarafından tanımlanan veri türü aynı zamanda bir seferde okunabilen ve yazılabilen belleğin boyutunu da gösterir.Char, short ve long bellek okumak ve yazmak için örnek olarak 1, 2 ve 4 bayt kullanır.

Dizi hafızanın gerçekleşmesidir.Dizin ve hafızanın fiziksel yapısı tam olarak aynıdır.Özellikle 1 baytı okurken ve yazarken bayt sayısı 1'i aştığında sadece bayt bayt okunabilir.Aşağıdaki bellek okumasıdır. Yazma süreci

Dizi öğrendiğimiz ilk veri yapısıdır.Hepimiz dizilerin geri getirme verimliliğinin nispeten hızlı olduğunu biliyoruz. Dizilerin erişim verimliliğinin neden bu kadar hızlı olduğuna gelince, bu makaledeki tartışmamızın odak noktası bu değil.

Yığın ve sıra

Dizilerin belleğin gerçeklemesi olduğunu yukarıda belirtmiştik.Diziler kullanmak programlamayı daha verimli hale getirebilir.Diğer veri yapılarını tanıyalım, bu veri yapıları sayesinde bellek de okunabilir ve yazılabilir.

Yığın

Yığın çok önemli bir veri yapısıdır.Yığın bellek üzerinde çalışmak için LIFO (Son Giren İlk Çıkar) kullanır. Büyük bir saklama kutusu gibidir, içine kitap gibi aynı tür şeyleri koyabilirsiniz, saklama kutusuna koyulan ilk kitap altta ve saklama kutusuna konulan son kitap üstte, kitap almak istiyorsanız Eğer öyleyse, yukarıdan başlamalısınız, aksi takdirde alttaki kitap çıkarılamaz.

Yığının veri yapısı şu şekildedir.Kitapları saklama kutusuna itme işlemine itme, saklama kutusundan kitap alma işlemi pop olarak adlandırılır.Model diyagramı muhtemelen şu şekildedir

Yığına itmek, artırma işlemine eşdeğerdir ve patlama işlemi, silme işlemine eşdeğerdir, ancak ad farklıdır. Yığın bellekten farklıdır, öğenin adresini belirtmesine gerek yoktur. Yaklaşık kullanımı aşağıdaki gibidir

// Verileri aktar İtme (123); İtin (456); İtme (789); // Verileri aç j = Pop; k = Pop; l = Pop;

Yığın içinde LIFO, yığın dizisinde saklanan son verilerin (Son Giren) ilk önce okunacağı (İlk Giren) anlamına gelir.

kuyruk

Sıra ve yığın çok benzer ancak farklıdır.Aynı şey, sıranın öğenin adresini belirtmesine gerek olmamasıdır.Aradaki fark, sıranın İlk Giren İlk Çıkar (İlk Giren İlk Çıkar) veri yapısı olmasıdır. Hayatımızda kuyrukların kullanılması, bilet almak için sıraya girmek için manzaralı bir noktaya gitmemize çok benzer. İlk sırada bilet alan ilk kişi vb. Kullanımı aşağıdaki gibidir

// kuyruğa veri yaz EnQueue (123); EnQueue (456); EnQueue (789); // kuyruktaki verileri oku m = DeQueue; n = DeQueue; o = DeQueue;

Kuyruğa veri yazma, EnQueue kuyruğa alma, kuyruktan veri okuma ise DeQueue olarak adlandırılır.

Yığının tersine, FIFO, kuyrukta ilk olarak depolanan verilerin ilk önce okunacağı anlamına gelir.

Genellikle iki kuyruk uygulaması vardır: sıralı kuyruklar ve döngüsel kuyruklar. Yukarıdaki örneğimiz sıralı kuyruklar kullanır, bu nedenle döngüsel kuyrukların uygulanmasına bir göz atalım.

Halka tampon

Dairesel sıra genellikle, veri akışlarını arabelleğe almak için uygun, sabit boyutlu, uçtan uca bir arabelleği temsil etmek için kullanılan bir veri yapısı olan bir halka arabelleğinde uygulanır. Bir halka tamponu uygulamak için 6 öğeden oluşan bir dizi kullanmak istiyorsak, verileri başlangıç konumundan düzenli bir şekilde saklayabilir ve ardından verileri saklandığı sırayla okuyabiliriz. Dizinin sonuna veri yazıldıktan sonra, bir sonraki veri tamponun başından itibaren yazılacaktır. Bu şekilde dizinin sonu ve başlangıcı birbirine bağlanır.

Bağlantılı liste

Daha sonra, indeksin sırasını dikkate almadan her ikisi de öğeleri okuyabilen ve yazabilen bağlantılı listeleri ve ikili ağaçları tanıtacağız. Bağlantılı listeleri kullanarak, veri öğelerini verimli bir şekilde ekleyebilir ve silebilirsiniz. İkili ağaç kullanarak, veriler daha verimli bir şekilde alınabilir.

Dizinin gerçekleştirilmesi temelinde, verinin değerine ek olarak, ona bir sonraki elemanın indisi eklenerek bağlantılı bir liste gerçekleştirilebilir. Verinin değeri ve sonraki elemanın adresi (indeksi), aşağıda gösterildiği gibi bağlantılı bir liste elemanı oluşturur

Bağlantılı listeyi eklemek ve silmek çok verimli.Ekleme ve silme sürecini anlatalım.P adresli elemanı silmek istersek, bağlantılı liste nasıl değişmeli?

P adresli öğeyi sildikten sonra, bağlantılı listenin doğrudan kaldırıldığını ve p'nin önceki konumundaki p öğesinin işaretçi alanının, p'nin sonraki bağlantılı liste öğesinin veri alanını gösterdiğini görebiliriz.

Daha sonra yeni eklenen bağlantılı liste için ekleme konumunu belirlemeniz gerekir.Örneğin, p ve p arasına p adresli bir öğe eklemek için, p'nin önceki konumunun işaretçi alanını p'nin adresi ile değiştirmeniz ve ardından p'nin işaretçisini değiştirmeniz gerekir. Etki alanını p adresiyle değiştirin.

Bağlantılı listenin eklenmesi verilerin taşınmasını içermez, bu nedenle bağlantılı listenin eklenmesi ve silinmesi çok hızlıdır ve dizinin eklenmesi verilerin hareketini içerir, bu nedenle yavaştır.Normalde dizi veri almak için kullanılır ve bağlantılı liste eklemek ve silmek için kullanılır işletme.

İkili ağaç

İkili ağaç, aynı zamanda çok yüksek geri getirme verimliliğine sahip bir veri yapısıdır İkili ağaç, dizinin boyut ilişkisini hesaba katarak, bağlantılı listeye dayalı olarak diziye eleman ekleme ve onu iki yöne bölme biçimini ifade eder. Dizide 50 değerini kaydedersek, sonra değeri yazmak istiyorsak, kimin daha büyük kimin daha küçük olduğunu belirlemek için 50 ile karşılaştırmalıyız 50'den büyük değeri sağa ve küçük olanı aşağıdaki şekilde gösterildiği gibi sola koyun. Bir ikili ağacın karşılaştırmalı bir örneğidir

İkili ağaçlar bağlantılı listelerden geliştirilir, bu nedenle ikili ağaçlar elemanların eklenmesinde ve silinmesinde eşit derecede etkilidir.

Bütün bu evrim hafızaya dayalıdır.

Yazar hakkında: cxuan, yolda inancında ısrar eden teknik bir adam

Feragatname: Bu makale yazar tarafından sunulmuştur ve telif hakkı yazara aittir.

Son

Tai'an Şehri Güvenlik Komitesi, şehir, ilçe ve kasaba seviyelerinde üç seviyeli güvenlik üretim "hükümet dışı ihlal" ihbar hattını duyurdu
önceki
En yakışıklı ikizler Wei Shenyang ve Wei Shenzhou "Dancing Storm" da kardeşliklerini göstermek için birlikte dans ediyorlar.
Sonraki
HUAWEI HiAI 3.0 dağıtılır, yine de yoga oynayabilir ve böyle sürebilirsiniz ...
Yerel Müzayede Haberleri Taban fiyat 4,725 yuan / Xingjin, Xingning'de 131 mu arazi kazandı ve ilk kez Nanning'e girdi
Rapor mektubu 26 kamu görevlisinin dahil olduğu 1 milyardan fazla çeteyi ortaya koyuyor
Neden tüm şirketler Nesnelerin İnterneti için savaşıyor?
Basketbol CBA normal sezonu: Guangdong Bank of Dongguan ile Xinjiang Yilite
Sağlıklı bir yaşam tarzı ile diyabeti yen
AutoML'nin geleceği ümit verici, mühendislerin geleceği nerede?
Dönüşünüzü bekliyorum! Çinli barışı koruma piyade taburu subay ve askerlerinin altıncı grubu yola çıktı
Binzhou Ebeveyn-Çocuk Turu Sarı Nehir kıyısındaki batı tarzı küçük bir avluda uyuyun, bir kubbe filmi gölge kukla gösterisini izleyin
Boy god halanın seyahat fotoğraflarını geri yüklüyor Dalian kolejleri ve üniversiteleri artık "süslü yatak kontrolü"
C dil sistemini Go ile yeniden yapılandıran, Bahar Festivali Gala kırmızı zarfına direnen bu Baidu yönlendirme motoru trilyonlarca trafik üstlendi
Büyükler ve kız kardeşler sizi kolejlere ve üniversitelere götürür: Shandong Sanat Üniversitesi, Meiyuan'ı yeni bir perspektiften ziyaret edin
To Top