Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม C

Near, Far, Huge Pointers ในภาษา C (Memory Models)

ขึ้นอยู่กับ Memory model (16-bit systems เช่น Turbo C) Pointers แบ่ง 3 ประเภท

1. Near Pointer

  • ทำงานใน 64KB data segment เดียว
  • ไม่เข้าถึงนอก segment ได้
  • Size: 2 bytes (16-bit offset)
  • Keyword: near
char near *str;

2. Far Pointer

  • เก็บ segment + offset (32-bit)
  • เข้าถึงได้ทั้ง 16 segments (1MB)
  • Increment/decrement เปลี่ยนแค่ offset
  • Keyword: far
char far *str;

3. Huge Pointer

  • คล้าย Far pointer (32-bit)
  • Increment/decrement ปรับ segment+offset อัตโนมัติ (ไม่มีปัญหา segment wrap)
  • Keyword: huge

โปรแกรมทดสอบขนาด

#include <stdio.h>
int main() {
    int num = 50;
    int near *np = #
    int far *fp = #
    int huge *hp = #
    printf("near pointer size: %zu\n", sizeof(np));   // 2
    printf("far pointer size: %zu\n", sizeof(fp));    // 4
    printf("huge pointer size: %zu\n", sizeof(hp));   // 4
    return 0;
}

ผลลัพธ์ (16-bit compiler)

near pointer size: 2
far pointer size: 4
huge pointer size: 4

หมายเหตุ: ใน 32/64-bit ระบบสมัยใหม่ ไม่มี near/far/huge แล้ว (flat memory model)