Re: Garbage collection in C++
"Chris M. Thomasson" <no@spam.invalid> wrote in message
news:RZZUk.1250$_i3.1052@newsfe06.iad...
"Matthias Buelow" <mkb@incubus.de> wrote in message
news:6oj5jvF3us0aU1@mid.dfncis.de...
Juha Nieminen wrote:
I have worked in a project where the amount of calculations performed
by a set of programs was directly limited by the amount of available
memory. (If the program started to swap, it was just hopeless to try to
wait for it to finish.)
You seem to think that a program that uses GC uses more memory, which is
just false in the general case.
Well, memory only gets reclaimed when the GC "decides" to run a scan. So,
if the program is making frequent allocations, and the GC does not run
enough scans to keep up, it has no choice to keep expanding its internal
heaps.
[...]
Here is a pseudo-code example that should really make a GC environment hog
memory:
struct node {
node* m_next;
void do_something_read_only() const;
};
static mutex g_lock;
static node* g_nodes = NULL;
void writer_thread() {
for (unsigned i = 1 ;; ++i) {
if (i % 10000) {
node* n = new node();
mutex::guard lock(g_lock);
n->m_next = g_nodes;
// membar #StoreStore
g_nodes = n;
} else {
g_nodes = NULL;
}
}
}
void reader_thread() {
for (;;) {
node* n = g_nodes;
// data-dependant load barrier
while (n) {
n->do_something_read_only();
n = n->m_next;
// data-dependant load barrier
}
}
}
int main() {
// create 10 writer threads
// create 32 reader threads
return 0;
}