Segfault на IA-64, но не на IA-32

Я не могу получить доступ к моей исходной учетной записи . Модераторам требуется объединить учетные записи, если это возможно.
Вот мой вопрос. Следующие C-программы se-ошибок IA-64, но отлично работают на IA-32.

int main() { int* p; p = (int*)malloc(sizeof(int)); *p = 10; return 0; } 

Почему это так происходит?

    В C возвращаемый по умолчанию тип – int если функция не прототипирована. В ia64 размер указателя больше, чем int, и поэтому он может segfault.

    Обновление . Вопрос в том, почему вы всегда должны прототипировать свои функции (или включать соответствующие заголовки, если на то пошло).

    Одной из причин, о которых я мог думать, является то, что прототип malloc отсутствует, учитывая компилятор pre 99.

    Неявный int (тип возврата) устарел. Однако, если ваш код segfaults означает, что компилятор предполагает, что функции (без какого-либо прототипа в области) возвращают целое число по умолчанию. В результате malloc будет рассматриваться как возrotation целого числа вместо указателя.

    В 32-битных реализациях sizeof(int) и sizeof(void*) – 32 бита каждый. В 64-битных реализациях sizeof(int) все тот же, но sizeof(void*) – 64 бит.

    Это может привести к прочтению 64-битного указателя на 32 бита.

    Включите чтобы решить проблему.

    Поскольку это IA64 (itanic), а не x64, это, вероятно, нечто основное, как malloc не гарантирующее выравнивание, ср. memalign и ранние версии IA64 не поддерживают неприглаженный доступ к памяти.