[問題] 如何縮小exe檔案的大小

看板C_and_CPP (C/C++)作者 (我愛阿蓉)時間16年前 (2010/01/19 13:52), 編輯推噓3(3047)
留言50則, 8人參與, 最新討論串1/2 (看更多)
有個同學問我 他被吩咐要把某程式的exe檔案想辦法變小 我沒有概念... 想問一下各位 該從何下手 再不改變程式邏輯的情況下 把甚麼東西改成什麼 對exe檔案的大小有差異 (也請各位講一下原因 謝謝) 我只能跟他講.h定義都拿掉 (原因我不是很知道 是因為inline後展開變程obj檔案變大 link以後整個exe變大嗎?) 以下順帶問兩個問題~ 我在查dll import是什麼.. http://hi.baidu.com/shenqb/blog/item/f485a81bbbe9d91a8718bf37.html 我找不太到~找到這網頁 我試著做 在class裡面宣告一個static int foo; 然後在.cpp 寫int class::a=5566; 編出來的dll和lib和.h把它複製到另一個專案程式(我有加上dllimport那個define) 然後去cout<<class::a; compile過了卻出現 無法找到程序輸入點?a@#!$!A在動態連結程式庫 xxx.dll 不知道是為啥 網頁上意思應該是說static 我們export出來 無法使用 一定要用dllimport這語法才認的到?? 有沒有比較確切的說明阿!...不知道為啥找不到..... 另外就是常看到大家講到symbol 這名詞 我不太了解他真正所涵蓋的 是只要是變數名稱或是function名稱都叫做symbol嗎? 還是有所區分 因為常看到有人講 unsolved symbol , external symbol... 不太了解所指的是什麼~~~ 以上請教各位 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.207.215

01/19 14:06, , 1F
改成release mode ?
01/19 14:06, 1F

01/19 14:06, , 2F
還有用DLL
01/19 14:06, 2F

01/19 14:07, , 3F
魚與熊掌不可兼得,如果不改程式,不針對code做最佳化,你
01/19 14:07, 3F

01/19 14:07, , 4F
可以考慮用UPX等exe compressor.
01/19 14:07, 4F

01/19 14:07, , 5F
看有沒有 strip symbol 以及對 sections 做 garbage
01/19 14:07, 5F

01/19 14:08, , 6F
collection 的 linker 參數。
01/19 14:08, 6F

01/19 14:37, , 7F
改成release一樣耶 而且有甚麼差別嗎@@
01/19 14:37, 7F

01/19 14:40, , 8F
請問什麼東西會跟exe大小有所關連 要怎麼從code下手@@
01/19 14:40, 8F

01/19 14:40, , 9F
你可以參考tinlans說的strip
01/19 14:40, 9F

01/19 14:40, , 10F
t大那個我會跟同學轉告 不過真的聽不懂 XD....
01/19 14:40, 10F

01/19 14:41, , 11F
static variable跟global variable少一點
01/19 14:41, 11F

01/19 15:11, , 12F
請問一下dll那個extern C需要連同變數也包在裡面嗎
01/19 15:11, 12F

01/19 15:11, , 13F
變數不會做mangling吧@@可是我連一般int 都認不到了...
01/19 15:11, 13F

01/19 15:33, , 14F
我發現我弄錯了 我dll擺在和vproj檔同目錄下 但是他找不到
01/19 15:33, 14F

01/19 15:33, , 15F
我記得他工作目錄 預設是跟vproj同層阿 怎麼會認不到...
01/19 15:33, 15F

01/19 15:35, , 16F
改成release build, code中有一些debug用的code/check機
01/19 15:35, 16F

01/19 15:36, , 17F
制會被去掉, 有些instruction也可能被最佳化而去掉, 不
01/19 15:36, 17F

01/19 15:36, , 18F
過主要還是看code怎麼寫的; 相對的, 個人也碰過, 不知道
01/19 15:36, 18F

01/19 15:37, , 19F
是inline展開的結果還是怎樣, release build出來的
01/19 15:37, 19F

01/19 15:37, , 20F
binary檔反而比debug版本大的....XD
01/19 15:37, 20F

01/19 15:41, , 21F
我認知工作目錄 是按下F5 程式跑時所在的目錄~但是好像錯了耶
01/19 15:41, 21F

01/19 15:41, , 22F
哪裡有問題阿@@ 他一直認不到dll..工作目錄都設了說
01/19 15:41, 22F

01/19 15:53, , 23F
還是說dll exe在load時 會有什麼路徑規定嗎..
01/19 15:53, 23F

01/19 15:53, , 24F
F5時 都說找不到dll 我用手點兩下就找到了
01/19 15:53, 24F

01/19 19:04, , 25F
我可以問一下目前多大嗎..
01/19 19:04, 25F

01/19 19:05, , 26F
另外問一下 compiler
01/19 19:05, 26F

01/19 19:16, , 27F
我記得每家 compiler 最起碼有 optimize for size 的選項
01/19 19:16, 27F

01/19 19:17, , 28F
,不過要是你放了一個有初值的 global array,size 高達數
01/19 19:17, 28F

01/19 19:17, , 29F
百 MB,那就是沒救了。
01/19 19:17, 29F

01/19 23:02, , 30F
是vc 不過想問一下 為什麼global array會影響exe呀
01/19 23:02, 30F

01/19 23:07, , 31F
有初值才會,因為那些資料通通要塞在執行檔裡面。
01/19 23:07, 31F

01/19 23:50, , 32F
t大這些知識是要修什麼課才會了解阿 我跟這些都不熟...
01/19 23:50, 32F

01/19 23:51, , 33F
什麼dll lib obj linker殺咪東西的 都不懂
01/19 23:51, 33F

01/19 23:52, , 34F
只知道怎樣用他認的到 怎樣才不會compile error....
01/19 23:52, 34F

01/20 00:24, , 35F
obj 和 linker 是計概會教吧,但是只有概念沒有軟體操作,
01/20 00:24, 35F

01/20 00:25, , 36F
軟體操作你可以沒事拿手冊來讀有哪些參數能設。
01/20 00:25, 36F

01/20 00:26, , 37F
LIB/DLL 大概就是要找 MS 開發環境的書看了吧。我幾乎沒在
01/20 00:26, 37F

01/20 00:27, , 38F
摸 MS 的開發環境,只知道是靜態跟動態連結檔;但跟 UNIX
01/20 00:27, 38F

01/20 00:27, , 39F
的 .a / .so 其實還是有一點程度上的差異。
01/20 00:27, 39F

01/20 00:43, , 40F
對了 t大要怎麼想才知道他會往exe腮 global的array 還是
01/20 00:43, 40F

01/20 00:43, , 41F
global都會 包括static?
01/20 00:43, 41F

01/20 00:57, , 42F
去修組合語言吧...
01/20 00:57, 42F

01/20 00:57, , 43F
你可以簡單的想, 你在程式裡不管靜態動態區域全域, 如果
01/20 00:57, 43F

01/20 00:58, , 44F
沒有給初值, 那麼你的binary需要記錄什麼資訊; 相對的如
01/20 00:58, 44F

01/20 00:59, , 45F
果有給靜態/不同的初值, binary可能不記錄這些'值'嗎@@"
01/20 00:59, 45F

01/20 02:01, , 46F
V大說的binary就exe嚕? 那到底是global還是全部變數給初值都
01/20 02:01, 46F

01/20 02:01, , 47F
會有影響呢? 感覺全部都會有耶
01/20 02:01, 47F

01/20 07:09, , 48F
data 的初值總是要找地方放,除非它們啟動的時候直接全清
01/20 07:09, 48F

01/20 07:09, , 49F
空成 0 就好了。C 有規定 global var 沒初值一定要清成 0
01/20 07:09, 49F

01/20 07:10, , 50F
,所以對 exe 的 filesize 沒啥影響。
01/20 07:10, 50F
文章代碼(AID): #1BLKYdAQ (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1BLKYdAQ (C_and_CPP)