Storage for class variable is reserved in the executable's data segment, _not_ the heap.
In the OP's example, storage for R and N is reserved in the data area (they are static variables - class scope "writable constants")
The _values_ of R and N _are_ accessible _without_ creating an instance of the class which proves they are stored in the executable's data segment, _not_ on the heap.
In the case of R and N, they are both stored in the data segment but their value will normally be to somewhere in a heap block but, that's because both, classes and strings (in FPC) are allocated on the heap. Manually, a programmer could set the value of those pointers to be anywhere he/she wants (but they probably would no longer point to a class or a string.)
This is all documented (though only implicitly) at
https://www.freepascal.org/docs-html/ref/refsu24.htmlPay particular attention to the line that reads
Note that the last line of code references the class type itself (cl), and not an instance of the class (cl1 or cl2). that's what tells you _where_ those variables reside. If they resided on the heap they could not be accessed using only the class identifier, an instance identifier would be needed (as it is needed in the case of fields.)
HTH.