﻿# Можно ли в 64\-битной программе использовать 32\-битные указатели?

Компиляторы Microsoft Visual C\+\+ и GCC на данный момент не позволяют использовать 32\-битные указатели в 64\-битном программном обеспечении, созданном для процессоров с архитектурой x86\-64\. На ряде других платформ \(например, PowerPC\) присутствует возможность использовать 64\-битные регистры и наборы инструкций совместно с 32\-битными указателями в 32\-битных программах\.

Простейший способ обойти невозможность использования 32\-битных указателей — хранение данных в глобальных массивах с использованием 32\-битных типов для их индексирования\. Недостатком подобного метода является невозможность динамического выделения памяти для подобных структур во время выполнения программы\. 

Другим способом является кодирование 64\-битных указателей в 32\-х битах\. Данная [статья](https://www.codeproject.com/articles/28818/32-bit-pointers-in-a-64-bit-world) детально описывает принципы работы функции 'sptr', предназначенной для выравнивания данных, а также особенности и ограничения ее использования\. Статья содержит примеры, иллюстрирующие механизмы кодирования 64\-битных указателей в 32\-битные\.

## Библиографический список

1. Обсуждение на сайте www\.stackoverflow\.com\. [Can a C compiler generate an executable 64\-bits where pointers are 32\-bits?](https://stackoverflow.com/questions/4117005/can-a-c-compiler-generate-an-executable-64-bits-where-pointers-are-32-bits)
1. The Code Project\. [32\-bit pointers in a 64\-bit world](https://www.codeproject.com/articles/28818/32-bit-pointers-in-a-64-bit-world)
1. База знаний\. [Как корректно привести указатель к int в 64\-битной программе?](https://pvs-studio.ru/ru/blog/posts/cpp/k0005/)
1. База знаний\. [Что такое макрос POINTER\_32 ?](https://pvs-studio.ru/ru/blog/posts/k0043/)