Компиляторы действительно могут зарезервировать дополнительную память для себя.
У Gcc есть флаг -mpreferred-stack-boundary
, чтобы установить выравнивание, которое оно будет поддерживать. Согласно документации значение по умолчанию равно 4, что должно приводить к 16-байтовому выравниванию, которое необходимо для инструкций SSE.
Как VermillionAzure отмечен в комментарии , вы должны предоставить свои параметры версии gcc и времени компиляции (используйте gcc -v
, чтобы показать их).
Environment.Is64BitOperatingSystem и Environment.Is64BitProcess вводятся в .NET 4. Для .NET 2 вам нужно будет попробовать некоторые другие ответы .
Звонить IsWow64Process
узнать, работает ли Ваш 32-разрядный процесс в WOW64 в 64-разрядной операционной системе. Можно звонить GetNativeSystemInfo
для обнаружения точно, каково это: wProcessorArchitecture member
из SYSTEM_INFO
будет PROCESSOR_ARCHITECTURE_INTEL
для 32-разрядного, PROCESSOR_ARCHITECTURE_AMD64
для x64 и PROCESSOR_ARCHITECTURE_IA64
для Itanium Intel.
Проверьте размер IntPtr с Маршалом. SizeOf. 32 бита = 4 байта, 64 бита = 8 байтов.
Править: Я не уверен, что это - то, что Вы ищете после чтения вопроса снова.
Проверьте просто IntPtr.Size
. У Вас должна быть целевая платформа как у AnyCPU.
Многое можно определить с помощью переменных окружения, используемых в C # - Как получить программные файлы (x86) в 64-битной Windows [И это случилось мне лучше, чем ответ Майка, который я +1 'd, так как мне интересно найти имя каталога Program Files]