private int GetSegmentNo(uint offset)
{
var segmentNo = (int)(offset / (uint)SegmentSize);
#if DEBUG
// check bounds
if(segmentNo >= segments.Length || segmentNo < 0)
{
throw new IndexOutOfRangeException(string.Format(
"Memory: Attemption to use segment number {0}, which does not exist. Total number of segments is {1}.",
segmentNo,
segments.Length
));
}
#endif
// if such segment is not currently allocated,
// allocate it
TouchSegment(segmentNo);
return segmentNo;
}