Read my preivious answer again. The fact that a value type modification has no effect has NOTHING to do with how it's memory was allocated. This is a result of the C# compiler design decision that value types passed to a method would be passed "By Value", not "By Reference". This means that a temporary copy of the value type is made and passed to the method. Anything done inside the method can only affect the COPY and not the original.
In order to change this default behavior, you would code the method to expect a reference to a value type, and explicitly pass by reference when calling that method:
A by ref method:
private void DoubleInt(ref int intToDouble)
{
intToDouble *= 2;
}
call that method:
int myInt = 5;
DoubleInt(ref myInt);