作者descent (「雄辯是銀,沉默是金」)
看板C_and_CPP
標題Re: 十三誡增修--01:你不可以使用尚未給予適當初值的變數
時間Thu May 12 13:09:35 2016
※ 引述《wtchen (沒有存在感的人)》之銘言:
: 標題: 十三誡增修--01:你不可以使用尚未給予適當初值的變數
: 時間: Thu May 12 00:01:20 2016
:
: 例如全域變數(global variable)或帶有static修飾字者,
: 其初值為定值(最自然的初值就是0)。
: (但是有些MCU 編譯器不理會這個規定,所以還是請養成設定初值的好習慣)
: → descent: bss 在 dos 時代也有, 怎麼會是 linux 特有, 05/12 12:29
: → descent: 可以反組譯看 asm 檔案, 即可確認 bss 的存在。 05/12 12:29
: 推 loveflames: dos有我倒是不知道,windows的PE沒有就是 05/12 12:33
$ cat a.cpp
int abc, xyz;
int main()
{
abc=5;
xyz=15;
return 0;
}
從這 dump pe
http://pedump.me/
https://lh3.googleusercontent.com/-yLMyneGPUW4/VzQOvqM9cPI/AAAAAAABXjU/PNjfd7jf4F4cPibAUOg8CNjlbzKZIF7dACCo/s800/pe.JPG
一樣有顯示 .bss section,
raw size 是 0, 不知道是不是我認知的哪個意思?
我是用 cygwin g++ 編譯的。
pe 我不熟悉, 但如果沒有 bss section 那還蠻特別的。
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 175.98.177.194
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1463029786.A.708.html
推 loveflames: 我在XP時代經常玩ollydbg,沒看到有bss,未初始跟初始 05/12 13:20
→ loveflames: data都放一起 05/12 13:21
→ tinlans: file 有沒有 bss 不重要啊,那個區域有東西描述大小多少 05/12 20:16
→ tinlans: 就可以了。PE 是 SizeOfRawData 表示 initialized data 05/12 20:17
→ tinlans: 的大小,然後 .data 的 VirtualSize 減掉 SizeOfRawData 05/12 20:18
→ tinlans: 就是拿來放要自動清成 0 的變數吧,進入 main() 之前把它 05/12 20:19
→ tinlans: 清成 0 就好了。單純就標記的方式不同而已 XD 05/12 20:19