11

Here is the way I can put float value to the stack(in C#):

ILGenerator gen = method.GetILGenerator();
gen.Emit(OpCodes.Ldc_R4, (float)12.5);

How can I put boolean value to the stack by using Emit method?

Pavel Podlipensky
  • 8,201
  • 5
  • 42
  • 53

1 Answers1

25

There is no representation of a boolean value on the evaluation stack. The bool, char, byte, ushort, uint, and their signed variants are all represented as a 4-byte signed integer (i4).

True:

ldc.i4.1

False:

ldc.i4.0
Sam Harwell
  • 97,721
  • 20
  • 209
  • 280
  • If everything is represented as 4-byte signed integer, are there memory advantages to use byte instead of ushort (for example) if the values are not going above byte max value ? – Hybris95 Mar 31 '15 at 07:59
  • 1
    @Hybris95 The evaluation stack is not the same as fields of an object. Fields (especially those in a struct) and elements of arrays can be more tightly packed to save memory. – Sam Harwell Dec 19 '16 at 17:05