Jump to content

Data segment

Википедиа — Чөлөөт нэвтэрхий толь
Memory address space of a process.

"Data Segment" (Data + BSS + Heap)

Data section” нь аливаа програмын тодорхой нэг хэсэгт байрлах хийсвэр хаягийн санах ой бөгөөд тухайн ачааллаж байгаа програмын глобал болон тогтмол хувьсагчдыг агуулна. Програмист нь эдгээр хувьсагчдыг код бичих явцад зарлаж өгнө.“Data section”-д байрлах “дата сегментүүд” нь програм ачааллаж байхад өөрчлөгдөж болох учраас “read-write” төрөлд хамаарагдах ба утга нь үл өөрчлөгдөх “дата сегментүүд” нь read-only төрөлд хамаарагдана. PC архитектур нь “read-write” төрлийн цөөн хэдэн санах ойн мужуудыг хуваарилдаг бөгөөд эдгээр нь: Data, Stack болон Code мужууд юм.


  • char s[] = "hello world" –д агуулагдах string утга нь “read-write” хэсэгт хамаарна. ( hello world )
  • char* string = "hello world" кодын мөрний ("hello world") string төрлөөр зарлагдсан учир “read-only” хэсэгт хадгалагдаж “String” –төрлийн заагч нь “read-write” хэсэгт байрлана.
  • static int i = 10 болон global int i = 10 нь “Data segment”-д хадгалагдана.

"BSS" Сегмент буюу анхны утга олгогдоогүй дата нь аливаа дата сегментийн төгсгөл хэсэгт ажиллаж эхлэх бөгөөд глобал хувьсагчид болон анхны утга нь 0 ба “source” кодонд тодорхой эхлэлгүй хувьсагчдыг агуулна. Жишээлбэл: “static int i; “ –д зарлагдсан хувьсагч нь BSS сегментэд хадгалагдана.

"Heap" хэсэг нь BSS сегментийн төгсгөл хэсгээс эхлэх бөгөөд том хаягууд болгон өөрчилнө. Heap хэсэг нь "malloc", "realloc" болон тэдгээрийн хэмжээг тохируулах "brk", "sbrk" системийн командуудыг ашигладаг "free" гэсэн 3 үйлдлээр зохион байгуулагдана. Heap нь тухайн процессийн нээлттэй сангууд болон динамикаар ачааллагдсан модулиудад ашиглагдана.