ขนาด Visual C++ ของเวอร์ชันดีบักและเวอร์ชันรีลีสบนไลบรารีแบบคงที่

ฉันมีคำถามเดียวกันกับ: ขนาด dll (ดีบักและปล่อย) แต่ฉันต้องการ เพื่อสอบสวนเรื่องนี้ต่อไป

รหัสของฉันมีเพียงไฟล์ .h 2kb หนึ่งไฟล์และไฟล์ .cpp 14k หนึ่งไฟล์ debug lib ผลลัพธ์ที่ได้คือ 185 kb ที่สร้างด้วย

/GS /analyze- /W3 /Zc:wchar_t /ZI /Gm /Od /sdl /Fd"Debug\vc110.pdb" /fp:precise /D "_CRT_SECURE_NO_WARNINGS" /D "_MBCS" /errorReport:prompt /WX- /Zc:forScope /RTC1 /Gd /Oy- /MTd /Fa"Debug\" /EHsc /nologo /Fo"Debug\" /Fp"Debug\lib_yyy.pch" 

เวอร์ชันวางจำหน่ายของฉันคือ 2275 kb

/GS /GL /analyze- /W3 /Gy /Zc:wchar_t /Zi /Gm- /O2 /sdl /Fd"Release\vc110.pdb" /fp:precise /D "_CRT_SECURE_NO_WARNINGS" /D "_MBCS" /errorReport:prompt /WX- /Zc:forScope /Gd /Oy- /Oi /MT /Fa"Release\" /EHsc /nologo /Fo"Release\" /Fp"Release\lib_yyy.pch" 

ดังนั้นฉันจึงพยายามปรับขนาดให้เหมาะสมแทนความเร็วและปิดการขยายแบบอินไลน์โดยคาดหวังบางสิ่งที่คล้ายกับเวอร์ชันดีบั๊ก (O1 และ Ob0 แทนที่จะเป็น O2):

/GS /GL /analyze- /W3 /Gy /Zc:wchar_t /Zi /Gm- /O1 /Ob0 /sdl /Fd"Release\vc110.pdb" /fp:precise /D "_CRT_SECURE_NO_WARNINGS" /D "_MBCS" /errorReport:prompt /WX- /Zc:forScope /Gd /Oy- /Oi /MT /Fa"Release\" /EHsc /nologo /Fo"Release\" /Fp"Release\lib_yyy.pch" 

ขนาดผลลัพธ์ : 2275 kb... เดี๋ยวก่อน.. อะไร ???

ถ้าฉันทำส่วนหัวของ dumpbin ในเวอร์ชัน debug ฉันจะได้บรรทัดมากมายในเวอร์ชัน release ขนาดทั้งหมดจะออกมาในย่อหน้าเล็กๆ ที่ไม่ระบุตัวตนเพียงย่อหน้าเดียว

แล้วฉันจะตรวจสอบได้อย่างไรว่าอะไรใช้พื้นที่ทั้งหมดนี้? และมันสมเหตุสมผลอย่างไรที่การเพิ่มประสิทธิภาพความเร็วและขนาดให้ขนาดเท่ากันและขนาดนั้นใหญ่กว่าที่ไม่ได้รับการปรับให้เหมาะสมเลยและมีข้อมูลการดีบักเพิ่มเติม


person AbsolutelyFreeWeb    schedule 16.07.2016    source แหล่งที่มา


คำตอบ (1)


"สร้างไฟล์แผนที่" ในตัวเลือกตัวเชื่อมโยงเป็นวิธีสากลในการดีบักคำถาม "เหตุใดจึงใหญ่มาก" แต่เนื่องจากคุณถามเกี่ยวกับ lib จึงใช้งานไม่ได้ มีคนไม่มากนักที่ใส่ใจเรื่องขนาดของ lib ฉันสงสัยว่าคนส่วนใหญ่ที่กังวลเกี่ยวกับขนาดของ lib นั้นสับสนและควรกังวลเกี่ยวกับขนาดของ exe จริงๆ แต่บางทีคุณอาจเป็นข้อยกเว้น

ฉันจะไม่เสียเวลาคิดเชิงปรัชญาเกี่ยวกับสิ่งที่ในทางทฤษฎีอาจทำให้โคเดเจนโหมดรีลีสมีขนาดใหญ่ขึ้น

สาเหตุที่เป็นไปได้มากที่สุดคือ "การเพิ่มประสิทธิภาพโปรแกรมทั้งหมด" และ "การสร้างโค้ดเวลาลิงก์" (ดู /GL ในบรรทัดคำสั่ง) ด้วยเหตุนี้ ไฟล์อ็อบเจ็กต์โหมด release จะถูกปล่อยออกมาโดยพื้นฐานแล้วเสร็จเพียงครึ่งเดียว ดังนั้นไฟล์เหล่านั้นจะไม่เล็กจนเกินไป การอบซ้ำเกิดขึ้นระหว่างการลิงก์ และนั่นคือจุดที่คนส่วนใหญ่วิเคราะห์ขนาดของโค้ดของตน

การสร้างใหม่เพียงเล็กน้อยอาจทำให้การวิเคราะห์ของคุณสับสนเช่นกัน

person zeromus    schedule 19.07.2016
comment
ขอบคุณสำหรับคำอธิบาย ใช่ ฉันเห็นว่าเมื่อฉันใช้ไฟล์ lib ขนาดใหญ่ใน exe ที่จริงแล้ว exe นั้นเล็กกว่า lib มาก - person AbsolutelyFreeWeb; 20.07.2016