的nm
這裏的手冊頁:MAN NM說什麼所有本地變量轉到數據/ BSS段?
符號類型。至少使用以下類型;其他的,如 那麼,取決於目標文件格式。如果小寫,符號通常是 本地;如果大寫字母,符號是全局的(外部)
而且它的下面具有「b」和「B」爲「未初始化的數據部分(也稱爲BSS)」和「d」和「d」爲「初始化數據部分「
但我認爲本地變量總是轉到堆棧/堆,而不是」數據「或」BSS「部分。那麼nm在談論什麼局部變量?
的nm
這裏的手冊頁:MAN NM說什麼所有本地變量轉到數據/ BSS段?
符號類型。至少使用以下類型;其他的,如 那麼,取決於目標文件格式。如果小寫,符號通常是 本地;如果大寫字母,符號是全局的(外部)
而且它的下面具有「b」和「B」爲「未初始化的數據部分(也稱爲BSS)」和「d」和「d」爲「初始化數據部分「
但我認爲本地變量總是轉到堆棧/堆,而不是」數據「或」BSS「部分。那麼nm在談論什麼局部變量?
在此上下文中的「本地」是指文件範圍。
即:
static int local_data = 1; /* initialised local data */
static int local_bss; /* uninitialised local bss */
int global_data = 1; /* initialised global data */
int global_bss; /* uninitialised global bss */
void main (void)
{
// Some code
}
函數作用域的靜態變量都會在數據或BSS(或文本)部分,這取決於初始化:
void somefunc(void)
{
static char array1[256] = ""; // Goes in BSS, probably
static char array2[256] = "ABCDEF…XYZ"; // Goes in Data
static const char string[] = "Kleptomanic Hypochondriac";
// Goes in Text, probably
…
}
類似的規則適用於在文件中定義的變量範圍,帶或不帶static
存儲類說明符 - 未初始化或零初始化數據進入BSS部分;初始化數據進入數據部分;並且常量數據可能在Text部分中出現。
[關於分配哪裏變量的分享](http://stackoverflow.com/questions/12798486/bss-segment-in-c) – Lundin