We regularly write articles on development and testing of 64-bit C/C++ programs. Each of the articles presents different viewpoints on 64-bit software development. But much information of these papers is repeated because we have to introduce the readers into the subject and various definitions. Unfortunately, it makes the process of reading series of articles very boring and therefore does not allow the readers to thoroughly study the issues of 64-bit software development.

We decided to unite all our knowledge into a single work where we will study all the questions concerning 64-bit programming at once. We have too many materials to arrange them in one article, so we decided to make it a course of lessons.

Let me briefly describe the course "Development of 64-bit C/C++ applications" and its contents.

The course concerns development of 64-bit applications in C/C++ language and is intended for those developers who use Visual Studio 2005/2008/2010 environment. Developers working with other 64-bit operating systems will also learn much interesting. The course will cover all the stages that allow the programmer to create a new safe 64-bit application and port an existing 32-bit code to a 64-bit system.

The course consists of 28 lessons devoted to studying 64-bit systems, issues of 64-bit software building, methods of searching for errors specific to 64-bit code and code optimization. We will also touch upon such questions as estimating the cost of migration to 64-bit systems and rationality of this move.

The authors of the course are me (candidate of physico-mathematical sciences Andrey Nikolaevich Karpov) and candidate of technical sciences Evgeniy Alexandrovich Ryzhkov. So we are ready to discuss this course here, explain various details to you, correct some mistakes if any and consider your opinions.

Course contents:
Lesson 01. What 64-bit systems are.
Lesson 02. Support of 32-bit applications.
Lesson 03. Porting code to 64-bit systems. The pros and cons.
Lesson 04. Creating the 64-bit configuration.
Lesson 05. Building a 64-bit application.
Lesson 06. Errors in 64-bit code.
Lesson 07. The issues of detecting 64-bit errors.
Lesson 08. Static analysis for detecting 64-bit errors.
Lesson 09. Pattern 01. Magic numbers.
Lesson 10. Pattern 02. Functions with variable number of arguments.
Lesson 11. Pattern 03. Shift operations.
Lesson 12. Pattern 04. Virtual functions.
Lesson 13. Pattern 05. Address arithmetic.
Lesson 14. Pattern 06. Changing an array's type.
Lesson 15. Pattern 07. Pointer packing.
Lesson 16. Pattern 08. Memsize-types in unions.
Lesson 17. Pattern 09. Mixed arithmetic.
Lesson 18. Pattern 10. Storage of integer values in double.
Lesson 19. Pattern 11. Serialization and data interchange.
Lesson 20. Pattern 12. Exceptions.
Lesson 21. Pattern 13. Data alignment.
Lesson 22. Pattern 14. Overloaded functions.
Lesson 23. Pattern 15. Growth of structures' sizes.
Lesson 24. Phantom errors.
Lesson 25. Working with patterns of 64-bit errors in practice.
Lesson 26. Optimization of 64-bit programs.
Lesson 27. Peculiarities of creating installers for a 64-bit environment.
Lesson 28. Estimating the cost of 64-bit migration of C/C++ applications.