看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《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