X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Fmetadata%2Fsgen-old-bridge.c;h=d33d5d86815d795db6168cf97b9e0f24b9c3f1ff;hb=755056dd25052d1105aa64707775d60ca82ac62f;hp=a93cc7734ade79befcc811e6a8a4bf05047531a8;hpb=32f2f7c898abd259b447eb318e9664e518ea6807;p=mono.git diff --git a/mono/metadata/sgen-old-bridge.c b/mono/metadata/sgen-old-bridge.c index a93cc7734ad..d33d5d86815 100644 --- a/mono/metadata/sgen-old-bridge.c +++ b/mono/metadata/sgen-old-bridge.c @@ -41,11 +41,12 @@ typedef struct { DynArray array; } DynSCCArray; - /* + * Bridge data for a single managed object + * * FIXME: Optimizations: * - * Don't allocate a scrs array for just one source. Most objects have + * Don't allocate a srcs array for just one source. Most objects have * just one source, so use the srcs pointer itself. */ typedef struct _HashEntry { @@ -56,8 +57,10 @@ typedef struct _HashEntry { int finishing_time; + // "Source" managed objects pointing at this destination DynPtrArray srcs; + // Index in sccs array of SCC this object was folded into int scc_index; } HashEntry; @@ -66,13 +69,19 @@ typedef struct { double weight; } HashEntryWithAccounting; +// The graph of managed objects/HashEntries is reduced to a graph of strongly connected components typedef struct _SCC { int index; int api_index; + + // How many bridged objects does this SCC hold references to? int num_bridge_entries; + + // Index in global sccs array of SCCs holding pointers to this SCC DynIntArray xrefs; /* these are incoming, not outgoing */ } SCC; +// Maps managed objects to corresponding HashEntry stricts static SgenHashTable hash_table = SGEN_HASH_TABLE_INIT (INTERNAL_MEM_OLD_BRIDGE_HASH_TABLE, INTERNAL_MEM_OLD_BRIDGE_HASH_TABLE_ENTRY, sizeof (HashEntry), mono_aligned_addr_hash, NULL); static int current_time;