public StackSnapshotsBufferSegment(
            IntPtr nativeSegmentObjectPtr,
            IntPtr segmentBufferStartAddress,
            uint segmentByteCount,
            uint snapshotsCount,
            DateTimeOffset timeRangeStart,
            DateTimeOffset timeRangeEnd)
        {
            if (nativeSegmentObjectPtr == IntPtr.Zero)
            {
                throw new ArgumentNullException($"{nameof(nativeSegmentObjectPtr)}");
            }

            if (segmentBufferStartAddress == IntPtr.Zero)
            {
                throw new ArgumentNullException($"{nameof(segmentBufferStartAddress)}");
            }

            if (timeRangeStart > timeRangeEnd)
            {
                throw new ArgumentException($"Time range start"
                                            + $" ({nameof(timeRangeStart)}={Format.AsReadablePreciseUnconverted(timeRangeStart)})"
                                            + $" may not come after the time range end"
                                            + $" ({nameof(timeRangeEnd)}={Format.AsReadablePreciseUnconverted(timeRangeEnd)}).");
            }

            _nativeSegmentObjectPtr   = nativeSegmentObjectPtr;
            SegmentBufferStartAddress = segmentBufferStartAddress;
            SegmentByteCount          = segmentByteCount;
            SnapshotsCount            = snapshotsCount;
            TimeRangeStart            = timeRangeStart;
            TimeRangeEnd = timeRangeEnd;
        }