spurious gc allocation
Ellery Newcomer
ellery-newcomer at utulsa.edu
Thu Nov 7 21:19:21 PST 2013
hello all.
I have a class member function that essentially looks like this:
ThisNode* _InsertAllBut(int value) {
ThisNode* node = MallocAllocator.allocate!(ThisNode)(1);
node.value = value;
node_count++;
return node;
}
I compile it on x86_64 and the compiler inserts a gc allocation.
I decompiled it, and it looks like it does this:
ThisNode* _InsertAllBut(int value) {
struct Thing {
typeof(this) thing1;
ThisNode* thing2;
int thing3;
}
Thing* rbp28 = _d_allocmemory(0x14);
rbp28.thing1 = this;
rbp28.thing3 = value;
if (this == 0) {
// not wasting my time figuring out _d_assert_msg's calling
conventions
r8d = 0x137c;
rcx = something pointing to "src/multi_index.d";
rdi = {length associated with rsi};
rsi = something pointing to "null this";
rdx = {length associated with rcx};
_d_assert_msg();
}
invariant._d_invariant(this);
rbp28.thing2 = MallocAllocator.allocate(1);
rbp28.thing2.value = rbp28.thing3;
this.nodecount ++;
return rbp28.thing2;
}
So. Why the heck is it using heap space for stack space? How the heck am
I supposed to call this from within a destructor?
More information about the Digitalmars-d-learn
mailing list