Golgappa.net | Golgappa.org | BagIndia.net | BodyIndia.Com | CabIndia.net | CarsBikes.net | CarsBikes.org | CashIndia.net | ConsumerIndia.net | CookingIndia.net | DataIndia.net | DealIndia.net | EmailIndia.net | FirstTablet.com | FirstTourist.com | ForsaleIndia.net | IndiaBody.Com | IndiaCab.net | IndiaCash.net | IndiaModel.net | KidForum.net | OfficeIndia.net | PaysIndia.com | RestaurantIndia.net | RestaurantsIndia.net | SaleForum.net | SellForum.net | SoldIndia.com | StarIndia.net | TomatoCab.com | TomatoCabs.com | TownIndia.com
Interested to Buy Any Domain ? << Click Here >> for more details...

what are far pointers?

Answer Posted / abhijeet kankani

A near pointer is a 16 bit pointer to an object contained in
the current segment, be it code segment, data segment, stack
segment, or extra segment. The compiler can generate code
with a near pointer and does not have to concern itself with
segment addressing, so using near pointers is fastest, and
generates smallest code. The limitation is that you can only
access 64kb of data at a time, because that is the size of a
segment - 64kb. A near pointer contains only the 16 bit
offset of the object within the currently selected segment.

A far pointer is a 32 bit pointer to an object anywhere in
memory. In order to use it, the compiler must allocate a
segment register, load it with the segment portion of the
pointer, and then reference memory using the offset portion
of the pointer relative to the newly loaded segment
register. This takes extra instructions and extra time, so
it is the slowest and largest method of accessing memory,
but it can access memory that is larger than 64kb,
sometimes, such as when dealing with video memory, a needful
thing. A far pointer contains a 16 bit segment part and a 16
bit offset part. Still, at any one instant of time, without
"touching" segment registers, the program only has access to
four 64kb chunks, or segments of memory. If there is a 100kb
object involved, code will need to be written to consider
its segmentation, even with far pointers.

Now, segments overlap. Each segment is 64kb in length, but
each one overlaps the next and the prior by 65520 bytes.
That means that every address in memory can be addressed by
64kb-1 different combinations of segment:offset pairs. The
result is that the total addressible memory was only 1mb,
and the total usable memory address space was 500kb to
600kb. That sounds odd, but Intel built it, Microsoft wrote
it, and DOS/Windows 3.1 grew up around it. I still have that
computer, and it still works just fine, thank you. :-)>

Now the huge pointer. The far pointer suffers because you
can not just add one to it and have it point the the next
item in memory - you have to consider segment:offset rules,
because of the 16 byte offset issue. The huge pointer is a
monolithic pointer to some item with a large chunk of
memory, and there are no segment:offset boundaries.
Beautiful - huhh?? - well, in order to get that, the pointer
to segment:offset calculation has to be done every time you
reference the pointer. It does allow you to create and
manipulate a single monolithic object that is greater than
64kb, but it has its costs.

Is This Answer Correct ?    5 Yes 0 No



Post New Answer       View All Answers


Please Help Members By Posting Answers For Below Questions

Write a C++ program to generate 10 integer numbers between - 1000 and 1000, then store the summation of the odd positive numbers in variable call it sum_pos, then find the maximum digit in this variable regardless of its digits length.

2059


what is a constant pointer in C

1246


Describe newline escape sequence with a sample program?

1171


Explain about C function prototype?

1142


Explain what is the difference between null and nul?

1214


What is cohesion and coupling in c?

1096


How can type-insensitive macros be created?

1219


What is difference between scanf and gets?

1372


What does c mean in basketball?

1048


What is self-referential structure in c programming?

1282


general for is %wd,f-d; in this system "w" means a) 'w' represent total width of digits b) 'w' represent width which includes the digits before,after decimal place and the decimal point c) 'w' represent width which includes the digits before only d) 'w' represent width after decimal place only

1118


write an interactive C program that will encode or decode a line of text.To encode a line of text,proceed as follows. 1.convert each character,including blank spaces,to its ASCII equivalent. 2.Generate a positive random integer.add this integer to the ASCII equivalent of each character.The same random integer will be used for the entire line of text. 3.Suppose that N1 represents the lowest permissible value in the ASCII code,and N2 represents the highest permissible value.If the number obtained in step 2 above(i.e.,the original ASCII equivalent plus the random integer)exceeds N2,then subtract the largest possible multiple of N2 from this number,and add the remainder to N1.Hence the encoded number will always fall between N1 and N2,and will therefore always represent some ASCII character. 4.Dislay the characters that correspond to the encoded ASCII values.  The procedure is reversed when decoding a line of text.Be certain,however,that the same random number is used in decodingas was used in encoding.

3541


How many data structures are there in c?

1170


What is header file in c?

1108


What is equivalent to ++i+++j?

1150