-
-
Notifications
You must be signed in to change notification settings - Fork 14.2k
Closed
Labels
C-discussionCategory: Discussion or questions that doesn't represent real issues.Category: Discussion or questions that doesn't represent real issues.O-windowsOperating system: WindowsOperating system: Windows
Description
I tried this code:
let mut map = HashMap::new();
for i in 0..350000 {
map.insert(i, vec![0u8; 1024 * 17]); //17KB
}
drop(map); //stuck here for a long timeI add println! before and after drop(map) , and it runs for a long time (more than couples of minutes).
But, if I change 1024 * 17 to 1024 * 16, then things will be different.
let mut map = HashMap::new();
for i in 0..350000 {
map.insert(i, vec![0u8; 1024 * 16]); //16KB
}
drop(map); //1sThe drop(map) will end in just about 1 second!
But everything runs well on Linux, either 16KB or 17KB.
Is 16KB a magic number ?
But it doesn't make any sense why it's stuck and the memory usage(about 5.8GB) hasn't been continuously decreasing on Windows.
And if I change HashMap to Vec, it works well too.
let mut arr = Vec::new();
for i in 0..350000 {
arr.push(vec![0u8; 1024 * 17]); //17KB
}
drop(arr); //fastSystem Info
OS: Windows 11 22H2
CPU: 12th Gen Intel(R) Core(TM) i7-12700H 2.70 GHz
Memory: 32G (16G * 2)
Meta
rustc --version --verbose:
rustc 1.76.0 (07dca489a 2024-02-04)
binary: rustc
commit-hash: 07dca489ac2d933c78d3c5158e3f43beefeb02ce
commit-date: 2024-02-04
host: x86_64-pc-windows-msvc
release: 1.76.0
LLVM version: 17.0.6
Metadata
Metadata
Assignees
Labels
C-discussionCategory: Discussion or questions that doesn't represent real issues.Category: Discussion or questions that doesn't represent real issues.O-windowsOperating system: WindowsOperating system: Windows