- 1
- 2
- 3
- 4
- 5
private unsafe bool IsOptionalOutParamSet(out Guid param)
{
fixed (Guid* guidPtr = ¶m)
return (IntPtr) guidPtr != IntPtr.Zero;
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+131
private unsafe bool IsOptionalOutParamSet(out Guid param)
{
fixed (Guid* guidPtr = ¶m)
return (IntPtr) guidPtr != IntPtr.Zero;
}
Т.е. еще как двигает объекты и меняет указатели. И причем делает это как при полной сборке, так и при частичной сборке gen0.
Что он делает с pinned объектами, которые прикололи с помощью fixed - х.з. Но судя по фразе "Excessive pinning of objects can increase fragmentation" он тупо их не трогает, и аллокатору потом приходится обходить эти объекты стороной, выделяя память за ними, если перед ними не получилось. От чего в куче остаются дырки. Но т.к. pinned объектов в нормальной проге не так много - всем похуй ;)
А если данные надо постоянно держать по одному адресу, потому что к ним лезут нативные треды, то их всяко можно выделить из нативной неуправляемой кучи.
D
t. стив баллмер