26 Ocak 2016 Salı

C Programlarının Hafıza Yerleşimi

Not : Konu ile ilgili olarak Segmentation Fault başlıklı yazıya bakabilirsiniz.

C Programlarının Hafıza Yerleşimi
Uygulama yüklendiğinde bellek bir çok sayfaya ayrılır . Şimdi sayfaların çeşitlerine bakalım.

Not : Assembly Kodu
Assembly yazarken de benzer sayfaları görebiliriz.
SECTION .data          ; Section containing initialised data
...
SECTION .bss           ; Section containing uninitialized data 
...
SECTION .text          ; Section containing code

Salt Okunur Sayfalar - Read Only Segment
Bu .init, .text, .rodata sayfaları salt okunur oluyorlar.

.Text Sayfalar
Bu alan programın çalıştırılabilir makine kodunun saklandığı alandır. Code Segment olarak ta anılır.

.RoData
Read Only Data anlamına gelir. Kodun içindeki const değişkenlerdir.
const char *foo = "foo";
const int bar = 234;
Bu tür değişkenlerin değeri değiştirilmeye kalkılırsa uygulama hata verir.

.rodata normalde ram'de olur. Gömülü ortamda flash bellekte olsun istersek şöyle yaparız.
__attribute__((section(".flash.rodata"))) ...

Okunup Yazılabilir Sayfalar - Read/Write Segment
bss - ilklendirilmemiş veri
bss block started by symbol anlamına gelir. İlk değeri atanmamış değişkenler burada saklanır.
"The BSS segment, also known as uninitialized data, is usually adjacent to the data segment. BSS segment contains all global variables and static variables that are initialized to zero or do not have explicit initialization in source code."
.data - ilklendirilmiş veri
İlk değer atanmış değişkenler burada saklanır.

"The data area contains global and static variables used by the program that are explicitly initialized with a non-zero (or non-NULL) value. "

Hiç yorum yok:

Yorum Gönder