我有下面的C代碼:在C中,爲什麼我初始化爲0的int變量被報告爲未初始化爲「nm」?
//declared at the beginning of the CAStar.c file:
int TERRAIN_PASSABLE = 1;
int TERRAIN_IMPASSABLE = 0;
int TERRAIN_SOME_WHAT_PASSABLE = 2;
我注意到,對於這些變量,如果他們有一個非零值,它們被the "nm" command報道型「d」(初始化):
_TERRAIN_PASSABLE |00000008| D |
_TERRAIN_SOME_WHAT_PASSABLE|00000004| D |
然而,這些初始化爲0被報告爲 「B」(未初始化):
_TERRAIN_IMPASSABLE |00000000| B |
爲什麼初始化之間的」差用0「和」用別的東西0初始化「?
它可能是一種優化,其中編譯器不會將堆變量初始化爲零,因爲它期望OS從操作系統中清零內存......只是一個猜測雖然。 – ypnos
@ypnos嗯,說實話,我也很喜歡這些線。但是,我留下了其中一個變量真正未初始化(只是:「int TERRAIN_SOME_WHAT_PASSABLE;」)。這個時間周圍的變量被報告爲「C」,所以(再次)與用0初始化(並且與用非0初始化時不一樣)不一樣。 –
由於ld.so將所有內容初始化爲零。與您的應用程序的運行時內存分配(@ypnos)無關 - 僅表示運行時鏈接程序不必將變量設置爲任何特殊的值。 –