İçeriğe atla

Boş işaretçisi

Bilgisayar biliminde boş işaretçi, sıfır referansı veya boş gösterici (İngilizceNull pointer), geçerli bir nesne adresini göstermeyen işaretçi ya da dolaylamaya verilen genel isimdir. Bir başka deyişle, değeri sıfır olan işaretçidir; yani bilgisayarın belleğinde geçerli olan bir adresi işaret etmemektedir. Bilgisayar programlarında, uzunluğu bilinmeyen bir listenin sonu veya bazı eylemlerin gerçekleştirilememesi gibi koşulları göstermek için rutin olarak boş işaretçiler kullanır; boş işaretçilerinin bu kullanımı, sıfırlanabilir tip veya opsiyonel bir veri tipi gibi düşünülebilir.

Boş işaretçi, değeri belirtilmemiş bir işaretçi ile karıştırılmamalıdır: Bir boş işaretçi, geçerli bir nesneyi işaret eden herhangi bir işaretçiden kesinlikle farklıdır. Öte yandan, programlama diline ve uygulamaya bağlı olarak, değeri belirtilmemiş bir işaretçi için aynı şeyi söylemek mümkün değildir. Bu nedenle, bir takım durumlarda değeri belirtilmemiş işaretçiler, diğer geçerli işaretçilerle eşit olabilir; veya boş işaretçilerle eşit olabilir. Her iki durum da farklı zamanlarda gerçekleşebilir. Veya karşılaştırma tanımsız duruma neden olabilir.

C

C'de, her türden iki boş göstergenin eşit karşılaştırılması garanti edilir.[1] Önişlemci makro NULL, bir uygulama tarafından tanımlanan boş gösterici sabiti olarak tanımlanır.[2] C standardı, boş göstergenin bellek adresi işaretçisiyle aynı olduğunu söylemez   Ancak, pratikte durum bu olabilir. Bir boş gösterici deşifre etmek, C[3] için tanımsız bir davranıştır.

Pratikte, bir boş göstergenin adresine erişmeye çalışmak ya da eşlenmemiş bellekten okuma veya yazma girişiminde bulunmak bir segmentasyon hatası veya bellek erişim ihlali tetikleyebilir. Bunu yapmak, programın çökmesine veya program kodu tarafından yakalanabilecek bir yazılım istisnasına dönüştürülebilir. Ancak, durumun böyle olmadığı bazı durumlar vardır. Örneğin, x86 gerçek modunda, 0000:0000 adresi okunabilir ve genellikle yazılabilirdir ve bu adrese bir işaretçinin kaydının kaldırılması, uygulamada tanımlanmamış ancak kilitlenmeyen davranışlara yol açabilecek mükemmel derecede geçerli ancak genellikle istenmeyen bir eylemdir.

C dilinde dinamik olarak bellek ataması (yaratma) yapmak için kullanılan metotlar da (calloc ve malloc gibi) kullanıldıkları zaman şayet başarılı bir şekilde boş bir bellek bölgesi yaratamazlarsa boş işaretçi return ederler.

C++

C++ 'da, NULL makrosu C'den devralınırken, sıfır için bir tam sayı değişmez değeri geleneksel olarak bir boş işaretçi sabitini temsil etmek için kullanılmaktadır.[4] Ancak, C++11 bunun yerine, açık boş işaretçi nullptr sabitini yazılımcıların kullanabilmesi için yaratmıştır.

Tarih

2009'da Tony Hoare (CAR Hoare),[5] 1965 yılında ALGOL W dilinin bir parçası olarak sıfır referansını icat ettiğini belirtti. 2009 yılında, Hoare boş işaretçi buluşunun "milyar dolarlık bir hata" olarak tanımlamıştır.

Kaynakça

  1. ^ ISO/IEC 9899, clause 6.3.2.3, paragraph 4.
  2. ^ ISO/IEC 9899, clause 7.17, paragraph 3: NULL... which expands to an implementation-defined null pointer constant...
  3. ^ ISO/IEC 9899, clause 6.5.3.2, paragraph 4.
  4. ^ "Chapter 5:
    The const qualifier (§5.4) prevents accidental redefinition of NULL and ensures that NULL can be used where a constant is required.". The C++ Programming Language. 14th printing of 3rd. United States and Canada: Addison–Wesley. Mart 2001. s. 88.
     
  5. ^ "Null References: The Billion Dollar Mistake". InfoQ.com. 25 Ağustos 2009. 28 Ağustos 2009 tarihinde kaynağından arşivlendi. Erişim tarihi: 8 Mayıs 2020. 

İlgili Araştırma Makaleleri

<span class="mw-page-title-main">C (programlama dili)</span> programlama dili

C, yapısal bir programlama dilidir. Bell Laboratuvarları'nda, Ken Thompson ve Dennis Ritchie tarafından UNIX işletim sistemini geliştirebilmek amacıyla B dilinden türetilmiştir. Geliştirilme tarihi 1972 olmasına rağmen yaygınlaşması Brian Kernighan ve Dennis M. Ritchie tarafından yayımlanan "C Programlama Dili" kitabından sonra hızlanmıştır. Günümüzde neredeyse tüm işletim sistemlerinin yapımında %95'lere varan oranda kullanılmış, hâlen daha sistem, sürücü yazılımı, işletim sistemi modülleri ve hız gereken her yerde kullanılan oldukça yaygın ve sınırları belirsiz oldukça keskin bir dildir. Keskinliği, programcıya sonsuz özgürlüğün yanında çok büyük hatalar yapabilme olanağı sağlamasıdır. Programlamanın gelişim süreciyle beraber programlamanın karmaşıklaşması, gereksinimlerin artması ile uygulama programlarında nesne yönelimliliğin ortaya çıkmasından sonra C programcıları büyük ölçüde nesne yönelimliliği destekleyen C++ diline geçmişlerdir.

Komut kümesi mimarisi, CPU'nun yazılım tarafından nasıl kontrol edileceğini tanımlayan bilgisayar soyut modelinin bir parçasıdır. ISA, işlemcinin ne yapabileceğini ve bunu nasıl yapacağını belirterek donanım ve yazılım arasında bir arayüz gibi davranır.

<span class="mw-page-title-main">C++</span> bir programlama dili

C++, Bjarne Stroustrup tarafından 1979 yılında Bell Laboratuvarları'nda geliştirilmeye başlanmış, C'yi kapsayan ve çok paradigmalı, yaygın olarak kullanılan, genel amaçlı bir programlama dilidir.

Programlama dillerinde işaretçi, bellek adresi tutmak için tasarlanmış bir türdür.

<span class="mw-page-title-main">IPv6</span> İnternet protokolünün 6. versiyonu

Internet Protocol Version 6 kısaca IPv6, aslında 32 bitlik bir adres yapısına sahip olan IPv4'ün adreslemede artık yetersiz kalması ve ciddi sıkıntılar meydana getirmesi üzerine IETF tarafından geliştirilmiştir.

<span class="mw-page-title-main">Bellek yönetimi</span>

Ana belleğin işlemler arasında paylaştırılmasına ana bellek yönetimi ya da bellek yönetimi adı verilir. İşletim sisteminin bu amaçla oluşturulan kesimine de bellek yöneticisi adı verilir.

Veri yapısı, bilgisayar ortamında verilerin etkin olarak saklanması ve işlenmesi için kullanılan yapı.

Arabellek aşımı ya da arabellek taşkını, iki yazılım arasında veri iletişimi için ayrılmış olan bir arabelleğe boyutundan daha fazla veri konulması ile ortaya çıkan durumdur.

Sanal bellek, fiziksel belleğin görünürdeki miktarını arttırarak uygulama programına (izlence) fiziksel belleğin boyutundan bağımsız ve sürekli bellek alanı sağlayan bilgisayar tekniğidir. Ana belleğin, diskin (ikincil saklama) önbelleği (cache) gibi davranmasıyla; yani disk yüzeyini belleğin bir uzantısıymış gibi kullanmasıyla gerçekleştirilir. Ancak gerçekte, yalnızca o anda ihtiyaç duyulan veri tekerden ana belleğe aktarılıyor olabilir. Günümüzde genel amaçlı bilgisayarların işletim sistemleri çoklu ortam uygulamaları, kelime işlemcileri, tablolama uygulamaları gibi sıradan uygulamalar için sanal bellek yöntemi kullanılmaktadır.

Sayfalama ya da bellek adresleme, durgun sanal bellek sayfalarının ikincil bellekte (teker) saklanarak daha sonra ihtiyaç duyulduğunda ana belleğe yüklenmesi işlemini içerir. Bir diğer anlamı, adres uzayının belli oranlarda bloklara ayrılmasıdır. Sayfalama, bellek mahallerine ulaşımı ve adreslemeyi kolaylaştırır. 6502 mikroişlemcili bir sistemde 65536'lık adres uzayı 256 adet 256 Baytlık hayalı sayfalara ayrılır. Genelde 6502 işlemcili sitemlerde 1. sayfa yığın olarak ayrılırken 0. sayfaya bakış tabloları veya veri blokları yerleştirilir.

Ana bellekteki tüm sayfalar kullanımdayken sayfa hatası oluşması durumunda, işletim sistemi bir sayfayı değiştirmek üzere seçmelidir. Sayfa hatalarının en aza indirilmesi amaçlandığından çoğu işletim sistemi yakın bir zamanda kullanılmayacağını varsaydığı bir sayfayı seçer. İşletim sistemlerin bu varsayımları geçmiş durum değerlendirmelerine dayanarak gelecek durumun tahmin edilmesine dayanır. Bu tahminlerde kullanılan algoritmaların başında en uzun zamandır kullanılmayanla değiştirme gelir. İşletim sistemi en uzun zamandır kullanılmayan sayfanın daha yakın bir zamanda kullanılan sayfadan daha az gerekli olduğu varsayımı yaparak uzun zamandır kullanılmayan sayfayı istenen sayfayla değiştirmek üzere seçer.

<span class="mw-page-title-main">BCD kodu</span>

BCD kodu, bilgisayar ve elektronik sistemlerinde onluk tabandaki (decimal) sayıların ikilik tabana (binary) dönüştürülmesi için kullanılan sayısal kodlama metodudur. Bu dönüştürme işlemi yapılırken öncelikle sayının her bir basamağı tek tek ikilik tabana çevrilir ve ardından her basamağın karşılık geldiği binary değerler sırasıyla birleştirilerek sayının BCD Kodu ile gösterimi elde edilir.

Mesaj doğrulama kodu kriptografi biliminde bir mesajın doğruluğunu kanıtlamak için kullanılan küçük boyutlu bilgilerdir.

<span class="mw-page-title-main">Termodinamiğin üçüncü kanunu</span>

Termodinamik'in üçüncü yasası bazen ‘mutlak sıfır sıcaklığında dengede olan sistemlerin özelliklerine ilişkin’ olarak şu şekilde tanımlanır:

Kriptografide, doldurma birçok farklı uygulamaya işaret eder.

Null, bilgisayar biliminde henüz değeri atanmamış olan ya da hiçbir değere sahip olmayan şeyleri ifade etmek için kullanılmaktadır. Bazen null byte ya da null terminator olan bilinen null karakter ise ASCII gibi karakter kodlama biçimlerinde sıfır değerine sahip karakterdir. Genellikle NUL ya da NULL olarak kısaltılan null karakter hemen hemen tüm programlama dillerinde mevcuttur.

C++20, C++17'den sonra C++ programlama dili için ISO/IEC standardının revizyonunun adıdır. Bu standart Şubat 2020'de Prag'daki toplantıda WG21 tarafından sonuçlandırıldı. Taslak 4 Eylül 2020 tarihinde onaylandıktan sonra C++20 standardı şu anda son çalışmalardan geçiyor.

C dinamik bellek yönetimi ve tahsisi, C standart kütüphanesinde mevcut bulunan birtakım hazır metotları kullanarak, kullanılacak olan program için bellekte sanal bir alan oluşturulmasını sağlar. C programlama dilinde dinamik bellek tahsisi için malloc, realloc, calloc ve free metotları kullanılmaktadır. malloc metodu kullanılarak bellekte bulunan kullanılmaya uygun bir alan, kullanıcı için tahsis edilir. Benzer şekilde calloc da bellekte kullanılmaya uygun bir hafıza alanını kullanıcının kullanımına açar fakat calloc hazırlanan bellek alanının içindeki verileri de sıfırlar. realloc metodu ise önceden calloc veya malloc kullanılarak oluşturulan bellek alanının büyüklüğünü dinamik zamanda (run-time'da) değiştirmek için kullanılır. free ise diğer dinamik bellek tahsisi metotları ile oluşturulan ve kullanılan bellek alanlarını temizlemek için kullanılır.

Tanımsız durum, programlamada bir standartın bir durumu tanımlayamacağı durumlara denmektedir.

C23, C programlama dilinin açık standard taslağıdır ve ISO/IEC 9899:2024 olarak yayınlanması ve C17'nin yerini alması beklenmektedir. 2016'da gayriresmi olarak C2x ve adıyla üzerinde çalışılmaya başlanmıştır ve Ekim 2024'te yayınlanması beklenmektedir. C23'ün en son taslağı 1 Nisan 2023'te yayınlanmıştır ve genel erişime açıktır. WG14 C2x taslağı için ilk olarak Ekim 2019 toplanmış, 2020'te COVID-19 pandemisi nedeniyle toplantılar sanal olarak uzaktan yapılmış, sonrasında telekonferans toplantıları 2024 boyunca devam etmiştir. Haziran 2024'teki açık standardta 'C23'ün bitiminden sonra, "C2y" olarak adlandırıldığı' belirtilmiştir.