分类: C/C++
2011-09-09 17:29:24
应该是near 和 far指针的问题。 PC机得存储器地址是由段地址和偏移地址组合而成,每一段不能超过64k字节地址,因而统一个段内的地址存取,用偏移地址就可以实现,因段地址寄存器所存的段地址是不变。当用指针时,只16未就够了,这一类就是near指针。当要在另一个段内取数据,就要跨越段,既要指明存取段的段地址和偏移地址,这时段地址寄存器所存段地址要改变,在使用指针指向另一个段内地址时,就要用32位表示,就是far指针了。 函数名: farmalloc 功 能: 从远堆中分配存储块 用 法: void far *farmalloc(unsigned long size); 程序例: #include #include #include #include int main(void) { char far *fptr; char *str = "Hello"; /* allocate memory for the far pointer */ fptr = farmalloc(10); /* copy "Hello" into allocated memory */ /* Note: movedata is used because we might be in a small data model, in which case a normal string copy routine can not be used since it assumes the pointer size is near. */ movedata(FP_SEG(str), FP_OFF(str), FP_SEG(fptr), FP_OFF(fptr), strlen(str) + 1); /* display string (note the F modifier) */ printf("Far string is: %Fs\n", fptr); /* free the memory */ farfree(fptr); return 0; } |