看板 C_and_CPP 關於我們 聯絡資訊
首先有個lib 高達4MB lib中全是靜態buffer宣告 主程式和單一thread 共占用了4.1MB 觀察了一下當thread開到第10個時候暴增到40MB左右 該如何設計才能避免 每個thread自行複製一份lib function? 或稱為各自有靜態大buffer. . ps. 過去我也以為function是絕對記憶體位置和大小 不會因為thread增加而記憶體用量變大... 還是實驗方法錯誤了? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 106.64.122.32 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1663098815.A.5B2.html ※ 編輯: kingofsdtw (106.64.122.32 臺灣), 09/14/2022 04:06:24
Schottky: 是 stack 吧 09/14 04:10
b0920075: 首先你要先確定你的程式真的有複製 lib function 和你 09/14 06:10
b0920075: 所謂的靜態 buffer ,一般來說這兩個東西應該是 thread 09/14 06:10
b0920075: 會共享的,不會你開一個 thread 就複製一份 09/14 06:10
b0920075: 再來, thread 有各自的 stack ,而 stack 一般來說一 09/14 06:16
b0920075: 次就會分配很多空間省的你一直跟系統要,所以記憶體越 09/14 06:16
b0920075: 吃越多很正常 09/14 06:16
wulouise: 靜態buffer是static char*[]?這怎會跟thread一起長大... 09/14 22:08
wulouise: 你所謂的開到第十個thread爆增,是fork還是std::thread? 09/14 22:09
kingofsdtw: char buffer[1024] 沒mutex 09/15 00:33
kingofsdtw: 我在研究看看...記憶體爆了 09/15 00:34
kingofsdtw: 感謝大家 09/15 00:35
Lipraxde: 只有開到十個 thread 的時候會爆? 09/15 00:49
Schottky: 所以這沒加 static,你要確認一下是 global 還是 local 09/15 03:13
Schottky: local 不是靜態記憶體,它是存在 stack 的..... 09/15 03:13
enthos: radare2/pwndbg/GEF/peda/Pwngdb 看最後一個github圖 09/15 03:29
wulouise: 你把測試code貼出來才好討論吧,靜態長度要看放哪 09/15 19:02