In 16-bit DOS memory models, how many bytes are used by near, far, and huge pointers respectively?
-
Anear=2 far=4 huge=4
-
Bnear=4 far=8 huge=8
-
Cnear=2 far=4 huge=8
-
Dnear=4 far=4 huge=8
-
ENone of the above
Answer
Correct Answer: near=2 far=4 huge=4
Explanation
Introduction / Context:Legacy 16-bit DOS compilers (e.g., Turbo C) used segmented memory. Pointer size depended on the model: near, far, and huge pointers referenced memory differently across segments and offsets. Recognizing these sizes is vital for understanding historical code and interview questions about memory models.
Given Data / Assumptions:
- Platform is 16-bit DOS with segment:offset addressing.
- near pointers reference within a single segment.
- far and huge pointers include both segment and offset.
Concept / Approach:A near pointer holds only a 16-bit offset (2 bytes). Far and huge pointers store a 16-bit segment and a 16-bit offset, totaling 32 bits (4 bytes). The difference between far and huge is semantic: huge pointers are normalized for arithmetic across segment boundaries, whereas far pointers are not necessarily normalized, but both are 4 bytes.
Step-by-Step Solution:Identify near pointer size: offset only → 2 bytes.Identify far/huge pointer sizes: segment (2 bytes) + offset (2 bytes) → 4 bytes.Conclude: near=2, far=4, huge=4.Recognize behavioral difference (normalization) without affecting size.
Verification / Alternative check:Consulting old compiler docs (e.g., Borland/Turbo C memory models) confirms 2-byte near and 4-byte far/huge pointers in 16-bit modes.
Why Other Options Are Wrong:
- near=2 far=4 huge=8: Huge is not 8 bytes in 16-bit DOS.
- near=4 far=8 huge=8 or near=4 far=4 huge=8: These sizes correspond to neither 16-bit DOS nor standard models.
Common Pitfalls:Confusing 32/64-bit flat models (where pointers are 4/8 bytes) with 16-bit segmented models. Always tie pointer size to architecture and memory model.
Final Answer:near=2 far=4 huge=4.