Is memory allocation in linux non-blocking?
Posted
by
Mark
on Stack Overflow
See other posts from Stack Overflow
or by Mark
Published on 2011-01-05T01:59:49Z
Indexed on
2011/01/06
2:53 UTC
Read the original article
Hit count: 234
I am curious to know if the allocating memory using a default new operator is a non-blocking operation.
e.g.
struct Node {
int a,b;
};
...
Node foo = new Node();
If multiple threads tried to create a new Node and if one of them was suspended by the OS in the middle of allocation, would it block other threads from making progress?
The reason why I ask is because I had a concurrent data structure that created new nodes. I then modified the algorithm to recycle the nodes. The throughput performance of the two algorithms was virtually identical on a 24 core machine. However, I then created an interference program that ran on all the system cores in order to create as much OS pre-emption as possible. The throughput performance of the algorithm that created new nodes decreased by a factor of 5 relative the the algorithm that recycled nodes.
I'm curious to know why this would occur.
Thanks.
*Edit : pointing me to the code for the c++ memory allocator for linux would be helpful as well. I tried looking before posting this question, but had trouble finding it.
© Stack Overflow or respective owner