Я хотел бы знать разницу между FAR
а также FAR *
используется в
эта функция от WinSock.
int PASCAL FAR connect (SOCKET s, const struct sockaddr FAR * name, int len);
Вы можете смело игнорировать FAR
ключевые слова, так как они больше не используются.
Давным давно во времена Win16 существовало 16 битных указателей (NEAR
) и 32-битные указатели (FAR
). Их обработка была другой и в некоторых случаях не простой. С начала Win32 эта разница исчезла. Win64 также не использует модель сегментированной памяти.
В то же время на аппаратном уровне сегменты все еще присутствуют в архитектуре Intel. Но эти детали полностью скрыты от программистов пользовательского режима (а также от разработчиков драйверов режима ядра) Windows.
Вы можете все еще найти эти ключевые слова в заголовочных файлах, потому что они никому не вредят.
В обоих случаях они изменяют размер указателей, когда этот код используется в модели с сегментированной памятью. const struct sockaddr FAR * name
говорит, что имя будет 32-битным указателем. int PASCAL FAR connect
говорит, что любой указатель на функцию соединения будет 32-битным указателем. Альтернатива будет NEAR
что означало бы, что указатели 16-битные.
Но никто не использовал сегментированные модели памяти начиная с Windows 3.1. Они такие старые, что я даже не уверен, что использую правильную терминологию. Они настолько стары, что я держу пари, что больше половины постоянных клиентов здесь никогда не услышат о них. Поэтому я могу с уверенностью сказать, что вы можете игнорировать любое использование FAR, просто притворяться, что его не существует.
Где ты это видел?