Managing memory with reference and value types
I have mentioned reference types a couple of times. Let's look at them in more detail.
There are two categories of memory: stack memory and heap memory. With modern operating systems, the stack and heap can be anywhere in physical or virtual memory.
Stack memory is faster to work with (because it is managed directly by the CPU and because it uses a last-in, first-out mechanism, it is more likely to have the data in its L1 or L2 cache) but limited in size, while heap memory is slower but much more plentiful.
For example, in a macOS terminal, I can enter the command ulimit -a
to discover that the stack size is limited to 8,192 KB and that other memory is "unlimited." This limited amount of stack memory is why it is so easy to fill it up and get a "stack overflow."
Defining reference and value types
There are three C# keywords that you can use to define object types: class
, record
, and struct
...