Dat heb ik al gehad

een value type wordt gealloceerd in het stackframe van de current scope, dus of in het stackframe van de huidige method/block of in het stackframe van de huidige instance of in de static instance in de huidige thread. Geef je een value type door op de normale manier aan een method, dan wordt de waarde gekopieerd. Geef je de value type via 'ref' door, dus een reference, dan geef je een REFERENCE door van het stukje geheugen in het STACKFRAME.
Dat klopt.
Je kunt nu via een ref parameter wel een private member dat een value type is, meegeven aan een method, en dus een addresspointer die wijst naar een heap adres meegeven, maar dat doet verder niet ter zake.
Agreed.
Een value type staat echter nooit op de heap zelf, het is altijd een onderdeel van een stackframe (simplistisch gezegd).
Misschien dat ik het niet zo duidelijk opgeschreven heb (niet meer posten met bier op

), maar mijn punt is nou juist dat CLR value-types wel degelijk op de stack kunnen staan, namelijk als ze geboxt zijn. Natuurlijk zijn het dan strict genomen ref-types, maar als je het type opvraagt zal het nog steeds als value-type aangegeven worden. Ik zie nu dat Sjaaky het eerder al wat duidelijker zei:
Structs kunnen geboxt worden, maar daar worden het nog geen refence-types van. Zou ook raar zijn de semantiek verschilt immers.
.
EfBe schreef:
Dat lijkt me niet zo terzake doende. Tenslotte worden de parameters die je meegeeft aan een method ook weer op de stack geplaatst van de huidige thread, dus of die stackframe builder nu 4 of 8 bytes daarop moet zetten dat zal die routine echt niet merken. Op de Amiga was memcopy vroeger via de CPU al niet zo duur, op een normale moderne CPU lijkt me dat ook niet echt een probleem.
dotcode zei in feite 'structs zijn sneller. punt.', net als jij hierboven zegt ('Dat is ook de reden waarom structs sneller zijn in .NET'). IMO is het niet zo simpel: denk maar aan de 'immense structs' waar je het zelf over hebt, die wel degelijk voor veel overhead zullen zorgen als ze steeds rondgekopieerd moeten worden.