![](/img/trans.png)
[英]Memory layout of c program, about the location of local variable and global varible
[英]What is memory layout of C program for null initialized global pointer variable?
我編寫了一個簡短的程序來檢查ptr1
和ptr2
的 memory 分配區域。 我發現ptr1
和ptr2
存在於.bss
(未初始化的數據段)中,因為我已經使用NULL
進行了初始化,我的問題是它們怎么會出現在 go in.bss 部分?
據我了解,它們應該是 .data 段的一部分。
#include <stdio.h>
char *ptr1 = NULL;
int *ptr2 = NULL;
int main()
{
return 0;
}
廣泛使用的“bss”和“data”段包含兩個初始化變量。 不同之處在於“數據”段將加載來自應用程序圖像*1的值。 段“bss”將用零初始化。
由於不需要在應用程序的圖像中存儲大量的零,因此普通系統不會這樣做。 所以只有“數據”段的初始值包含在圖像中。 您可能會將其視為一種原始的上下文感知壓縮。
如果您在沒有顯式初始化的情況下定義 static 變量,則 C 標准承諾將其歸零,這是一種隱式初始化。 因此,使用零值*2的顯式初始化是等價的。 但是,它使您的源代碼在適用的情況下更易於理解。
注意:另一個常見的段是“rodata”,它包含所有只讀的 static 變量。
* 1:這樣的圖像可以是您文件系統中的可執行文件,或者對於簡單的嵌入式系統,flash 中的某些部分。
* 2: NULL
是具有這種值的指針。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.