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