64-bit migration

All about 64-bit programming in one place

In this post I've collected a lot of links on the topic of 64-bit C/C++ software development. These include my articles and articles by my colleagues in the sphere of developing safe and efficient 64-bit code; FAQ's and a training course. There are also many reviews of third-party articles on 64-bit software development. Enjoy yourself studying the materials.

1. Articles:

64-bit programs and floating-point calculations

A developer who is porting his Windows-application to the 64-bit platform sent a letter to our support service with a question about using floating-point calculations. By his permission we publish the answer to this question in the blog since this topic might be interesting for other developers as well.

The text of the letter

I want to ask you one particular question concerning 32 -> 64 bits migration. I studied articles and materials on your site and was very astonished at the discrepancy between 32-bit and 64-bit code I had encountered.

64-битные программы и вычисления с плавающей точкой

К нам в поддержку обратился разработчик, занимающийся портированием своего Windows-приложения на 64-битную платформу. Он задал вопрос, связанный с использованием вычислений с плавающей точкой. С его разрешения мы публикуем в блоге ответ на вопрос, поскольку эта тема может быть интересна и другим разработчикам.

Текст письма

Хочу задать вам один конкретный вопрос, касающийся миграции 32 -> 64 бита. Статьи и материалы на вашем сайте я изучал, тем более был удивлён тому несоответствию в работе 32- и 64-битного кода, что я обнаружил.

Don't Get Caught in a 64-bit Speed Trap


With 64-bit processing becoming both more prevalent and affordable, developers trying to stay on the cutting edge will be wise to look at 64-bit migration scenarios. There a number of factors to consider when deciding whether to port or rebuild applications to take advantage of 64-bit processing. The key is to target the appropriate processor for the task at hand.

  • 服务器
  • 64-bit migration
  • 并行计算
  • 英特尔® 安腾® 处理器
  • Атавизмы в больших системах 2

    В Windows есть компонент, который собирает информацию об ошибках приложений. Отражается это в том, что при падении приложения мы видим окошко, где нам говорится, что "Приложение совершило недопустимую операцию... " или что-то в этом роде, а также можно просмотреть некоторую информацию об ошибке и отправить отчёт Майкрософту. Также эта информация помещается в журналы ОС, где её можно потом просмотреть.

    В Windows XP и младше этим компонентом был Dr.Watson - drwtsn32.exe. В Висте и семёрке его заменил WerFault. Так вот недавно я заметил один маленький недочёт в его работе.

    Проблемы 64-битного кода в реальных программах: изменение типа указателя

    Явные приведения типа часто маскируют ошибки, связанные с изменением типа указателя. Одной из таких ошибок является превращение указателя на 32-битные объекты в указатель на 64-битные объекты. Рассмотрим пример, присланный пользователями нашего инструмента PVS-Studio (Viva64). Ошибка проявляет себя после переноса кода на 64-битную версию Windows:
    void ProcessTime(long * pTime)
      time((time_t *)pTime);

    A nice 64-bit error in C

    In C language, you may use functions without defining them. Pay attention that I speak about C language, not C++. Of course, this ability is very dangerous. Let us have a look at an interesting example of a 64-bit error related to it. Below is the correct code that allocates and uses three arrays, 1 GB each:
    #include < stdlib.h >

    void test()
    const size_t Gbyte = 1024 * 1024 * 1024;
    size_t i;
    char *Pointers[3];

    // Allocate
    for (i = 0; i != 3; ++i)
    Pointers[i] = (char *)malloc(Gbyte);

    Issues of 64-bit code in real programs: virtual functions

    We have already written in our articles about one of the problems of code migration to 64-bit systems relating to incorrect overload of virtual functions. For example, our article "20 issues of porting C++ code on the 64-bit platform" was published in March, 2007 (although is still relevant). It described the issue of virtual functions. The point of the problem consists in the following. There is CWinApp class in MFC library which has WinHelp function:
    class CWinApp {

    Magic constants and malloc() function

    Once again I would like to discuss the issue of using magic constants in code. We can eternally repeat that one should use sizeof() operator for correct calculation of the size of memory being allocated. But both this knowledge and correct writing of a new code will not help you detect an error already existing in the maze of the old code in large projects. Let’s consider a typical example of an error:

    订阅 64-bit migration