You are on page 1of 12

Windows 7: 64 bit vs 32 bit?

Not only are there going to be several Windows 7 editions, but you will also need to decide if you are going to run a 32 bit or 64 bit version of the operating system. If your CPU is more than a few years old there is a good chance that you can only run the 32 bit version of Windows 7, however if you have a modern processor you may have to decide between each version. The 32 or 64 bit architecture refers to the memory address length that can be referenced by the processor. This also has an impact on the maximum amount of memory that can be utilised, which is 4GB for a 32 bit CPU (but in reality the maximum accessible ram is often closer to 3.4 GB due to other hardware allocations such as graphics card memory). Having a 64 bit OS doesnt automatically make all applications faster because much of todays software is written and optimised for a 32 bit era. Youll need software specifically optimised for 64 bit processing to take advantage of any speed improvements. Fortunately, many games are already including such enhancements. You may think that using a 64 bit OS for a 64 bit processer is an obvious decision, but it is not so straightforward. Introducing a new architecture will cause new compatibility and driver problems that wouldnt exist under the old 32 bit version. Pros and Cons of a 64 bit system:

You can address much more than 4GB of memory, which is ideal for avid gamers, CAD, video editors and heavy multi-taskers. However, any 32 bit software you use will still be restricted to 4GB memory you need a 64 bit CPU, OS and applications to take full advantage of the extra RAM. 16 bit applications will no longer run. Although this is unlikely to be a problem, if you use very old software (from the Windows 3.1 days!) then it will not work under a 64 bit OS. Existing 32 bit drivers no longer work.If you have older or poorly supported hardware you may find that it can no longer be used. Got a 7 year old scanner that just about works in Vista? You may not be able to get it working in 64 bit Windows 7. Unsigned kernel-mode drivers no longer work. Along with the issue above, the inability to run unsigned kernel mode drivers will cause problems for old hardware. (There is reportedly a way to bypass this check). Running some 32 bit applications on a 64 bit OS could actually be slower. The additional overheads in running 32 bit software in 64 bit mode could cause a slight degradation in performance. It will take some time for 64 bit software to become the norm.

The conclusion? Well, it depends on what you use your system for. If you have a 64 bit capable CPU but use older hardware, it would be safe to stay with a 32 bit version for the time being to ensure that you dont need extra upgrades. If youve got the latest hardware and drivers are available, then it would be worth while taking the step up to a 64 bit OS. If you regularly work with resource hungry applications that are 64 bit optimised (such as video editing, CAD and image packages) then it would be especially beneficial to be able to work with over 4GB of RAM amongst the other improvements. In the not too distant future, 64 bit computing will be a common standard as all hardware from the last couple of years has been designed with this in mind. Until a complete upgrade cycle has passed for the majority of users, there is still a strong case for some users to stick with 32 bit Windows for the time being. Once more 64 bit applications start to appear, it would be a good time to make the switch to the new architecture.

32-bit and 64-bit Windows: frequently asked questions What is the difference between 32-bit and 64-bit versions of Windows? The terms 32-bit and 64-bit refer to the way a computer's processor (also called a CPU), handles information. The 64-bit version of Windows handles large amounts of random access memory (RAM) more effectively than a 32-bit system. For more details, go to A description of the differences between 32-bit versions of Windows Vista and 64-bit versions of Windows Vista online. How can I tell if my computer is running a 32-bit or a 64-bit version of Windows? To find out if your computer is running 32-bit or 64-bit Windows, do the following: 1. Open System by clicking the Start button , clicking Control Panel, clicking System and Maintenance, and then clicking System. 2. Under System, you can view the system type. Which version of Windows Vista should I install: the 32-bit version or the 64-bit version? To install a 64-bit version of Windows Vista, you need a processor that's capable of running a 64-bit version of Windows. The benefits of using a 64-bit operating system are most apparent when you have a large amount of random access memory (RAM) installed on your computer (typically 4 GB of RAM or more). In such cases, because a 64-bit operating system can handle large amounts of memory more efficiently than a 32-bit operating system, a 64-bit operating system can be more responsive when running several programs at the same time and switching between them frequently. For more information about the benefits of running 64-bit computers, go to Understanding 64-bit PCs online. How do I tell if my computer can run a 64-bit version of Windows? To run a 64-bit version of Windows, your computer must have a 64-bit-capable processor. To find out if your processor is 64-bit-capable, do the following: 1. Open Performance Information and Tools by clicking the Start button , clicking Control Panel, clicking System and Maintenance, and then clicking Performance Information and Tools. 2. Click View and print details. 3. In the System section, you can see what type of operating system you're currently running under System type. Under 64-bit capable, you can see whether you can run a 64-bit version of Windows. (If your computer is already running a 64-bit version of Windows, you won't see the 64-bit capable listing.) Can I upgrade from a 32-bit version of Windows to a 64-bit version of Windows? No. If you are currently running a 32-bit version of Windows, you can only perform an upgrade to another 32-bit version of Windows. Similarly, if you are running a 64-bit version of Windows, you can only perform an upgrade to another 64-bit version of Windows. If you want to move from a 32-bit version of Windows to a 64-bit version of Windows Vista or vice versa, you'll need to back up your files and then choose the Custom option during Windows Vista installation. Then, you'll need to restore your files and reinstall your programs. For more information, see Installing and reinstalling Windows Vista. For detailed information about installing and upgrading 32-bit and 64-bit versions of Windows, go to Installation choices for Windows Vista (32-bit) or Installation choices for Windows Vista (64-bit) online.

Notes

To install a 64-bit version of Windows on a computer running a 32-bit version of Windows, you'll need to start, or boot, your computer using a 64-bit Windows installation disc. If you start your computer using a 64-bit Windows installation disc, but your computer isn't capable of running a 64-bit version of Windows, you'll see a Windows Boot Manager error. You'll need to use a 32bit Windows installation disc instead.

Can I run 32-bit programs on a 64-bit computer? Most programs designed for the 32-bit version of Windows will work on the 64-bit version of Windows. Notable exceptions are many antivirus programs. Device drivers designed for 32-bit versions of Windows won't work on computers running a 64-bit version of Windows. If you're trying to install a printer or other device that only has 32-bit drivers available, it won't work correctly on a 64-bit version of Windows. If you are unsure whether there is a 64-bit driver available for your device, go online to the Windows Vista Compatibility Center. Can I run 64-bit programs on a 32-bit computer? If the program is specifically designed for the 64-bit version of Windows, it won't work on the 32-bit version of Windows. (However, most programs designed for the 32-bit version of Windows will work on the 64-bit version of Windows.) Device drivers designed for the 64-bit version of Windows won't work on computers running a 32-bit version of Windows. To learn how to check for drivers, see Update a driver for hardware that isn't working properly or go to the device manufacturer's website. How can I find programs and devices that work with the 64-bit version of Windows Vista? You can go online to the Windows Vista Compatibility Center and check to see whether the program or device is compatible with the 64-bit version of Windows Vista. If I'm running a 64-bit version of Windows, do I need 64-bit drivers for my devices? Yes, all hardware devices need 64-bit drivers to work on a 64-bit version of Windows. Drivers designed for 32bit versions of Windows won't work on computers running 64-bit versions of Windows. If you are unsure whether there is a 64-bit driver available for your device, see Update a driver for hardware that isn't working properly or go to the device manufacturer's website. 32-bit Windows 7 or 64-bit Windows 7? The right choice of Windows 7 versions depends on a number of factors. Let InfoWorld's bitwise FAQ be your guide For most would-be Windows 7 users, a 64-bit version of Windows 7 is the right move. But if you don't have sufficient RAM (at least 4GB), or you rely on devices that don't have supporting 64-bit drivers, or you need to upgrade an existing 32-bit installation, 32-bit Windows 7 might be the better choice. A few editions of 64-bit Windows 7 provide a Windows XP Mode that solves some backward-compatibility problems, but it isn't a universal panacea. In speedy Q&A format, here's just what you need to know. Q. Is my PC supported under 64-bit Windows 7? A. Most PCs manufactured in the past three years (i.e. after Vista's debut) are capable of running 64-

bit Windows 7. The exceptions are those that ship with low-end CPUs that don't support the AMD or Intel 64-bit extensions. Examples include Intel's Atom line of low-powered CPUs and early Intel Core CPUs, like the Core Duo (not Core 2 Duo). If you're not sure what kind of CPU is in your system, or whether the CPU supports 64-bit operation, you can use the free Intel Processor Identification Utility to find out. Q. What about all of my peripherals? A. As with PC support, most peripherals manufactured in the Vista era work with 64-bit Windows 7. However, legacy hardware support is a hit-or-miss proposition. Some manufacturers -- for example, vendors of network interface cards or disk storage controllers -- are more up to date than others, thanks in part to the fact that they've been supporting 64-bit computing under Windows Server since the 2002-2003 timeframe. Devices that don't have obvious ties to the datacenter (such as custom input devices, multimedia hardware, and some printers) can be harder to integrate since they were manufactured at a time when 64-bit desktops were a rarity. Your best bet is to do a Web search to see if the manufacturer has published a 64-bit device driver and, barring that, if other users have come up with a solution.

The Lifehacker Guide to 64-bit vs. 32-bit Operating Systems You're probably aware that 64-bit and 32-bit versions of your operating system exist, but apart from ascribing to a bigger-is-better philosophy, you may have no idea what separates the two. The question: Should you use a 64-bit version of Windows, and why? More and more frequently, users are installing the 64-bit version of their operating system of choice over the less capable 32-bit version. But most people don't really have a full understanding of what the difference really is. Below, we're taking a look at the most important differences so you can better understand what you gain (and potentially lose) if you upgrade to the 64-bit version of your OS. (The post focuses on Windows.) We've already explained whether you really need 4 GB of RAM, a question that touches on the 64-bit issue, but now let's tackle it in more detail. Which Version Do I Have? To figure out which version of Windows you are running, just head into the System properties in Control Panel, or you can take the easy route and right-click on your Computer icon in the start menu or desktop, and choose Properties from the menu. Windows 7 or Vista users will be able to check the System type in the list, while the few XP users with 64-bit will see it on the dialog. Keep in mind that your CPU must support 64-bit in order to be running a 64-bit operating systemif you're running a modern CPU you should be fine, but some of the budget PCs don't include a 64-bit processor. Does 32-bit Really Have a Memory Limit? In any 32-bit operating system, you are limited to 4096 MB of RAM simply because the size of a 32-bit value will not allow any more. On a 32-bit system, each process is given 4 GB of virtual memory to play with, which is separated into 2 GB of user space that the application can actually use at a time.

Savvy readers might point out that modern chips support PAE, a processor technology that allows the operating system to use a little bit more memoryup to 64 GB, but it also requires special application support that most applications don't have or necessarily need. A common misconception is that this is a Windows-specific problem, when in fact 32-bit Linux and Mac OS X have the same limitations and the same workarounds. 32-bit Linux uses a mapping table to allow access to the extra memory, and OS X Snow Leopard actually ships by default with a 32-bit kernel that can't access all the memory on older systems, even though most of the rest of the OS runs 64-bit processes. The 4 GB limit for Windows, at least, is also a factor of licensingthe home versions of 32-bit Windows, while technically being able to support PAE, have a hard limit of 4 GB for licensing and driver compatibility reasons. More Problems with 32-Bit Not only does 32-bit have a hard limit for the amount of memory it can address, there's also another problem: your devices, like your video card and motherboard BIOS take up room in that same 4 GB space, which means the underlying operating system gets access to even less of your RAM. Windows expert Mark Russinovich found that a desktop running 32-bit Windows with 4 GB of RAM and two 1 GB video cards only had 2.2 GB of RAM available for the operating systemso the bigger and better your video cards get, the less of that 4 GB will be accessible on a 32-bit system. What's Different About 64-Bit? While 32 bits of information can only access 4 GB of RAM, a 64-bit machine can access 17.2 BILLION gigabytes of system memory, banishing any limits far into the future. This also means that your video cards and other devices will not be stealing usable memory space from the operating system. Windows 64-bit Home editions are still limited to 16 GB of RAM for licensing reasons, but the Professional and Ultimate versions can use up to 192 GB of RAM, so keep that in mind when building that killer system. The per-process limit is also greatly increasedon 64-bit Windows, instead of a 2 GB limit, each application has access to 8 TB of virtual memory without any special API, a huge factor when you consider applications like video editing or virtual machines that may need to use enormous amounts of RAM. On Windows, the 64-bit versions also come with a technology to prevent hijacking the kernel, support for hardware-enabled data execution protection, and mandatory digitally signed 64-bit device drivers. You also won't be able to use your 16-bit apps anymore, which hardly seems like a loss. Do 32-bit Applications Work on 64-Bit? The vast majority of your 32-bit applications will continue to work just fine on 64-bit Windows, which includes a compatibility layer called WoW64, which actually switches the processor back and forth between 32-bit and 64-bit modes depending on which thread needs to executemaking 32-bit software run smoothly even in the 64-bit environment. There are some exceptions to that rule, however: 32-bit device drivers and low-level system applications like Antivirus, shell extensions that plug into Windows, and some media applications simply won't work without a 64-bit equivalent. In practice, the vast majority of your favorite applications will either continue to work, or provide a 64bit version you can use insteadbut you should check to make sure.

Does 64-Bit Use Double the RAM? A common misconception about 64-bit Windows is the amount of RAM that is actually usedsome people seem to think it will use double the RAM, while others incorrectly assume a 64-bit system will be twice as fast as 32-bit. While it's true that 64-bit processes will take a little extra memory, that is a result of the memory pointers being a little bigger to address the larger amount of RAM, and not an actual double in size. Imagine, if you will, an ancient library filing system that has a card to tell you where to find the book in the libraryif you got a bigger box to hold the cards, the library would not double in size, you'd just be able to find the book you were looking for more easily. What will increase with 64-bit Windows is the amount of drive space needed for the operating systemwith a compatibility layer in place, the base OS will take up a few extra GBs of space, though with today's massive hard drives that should hardly be a concern. The Bottom Line, Which Should I Use? If you are ordering a new PC with 4 GB or more of RAM, you should probably be running a 64-bit version of Windows so you can use all of the available memory, especially if you want a rig with a large video cardjust keep in mind that the Home versions only support 16 GB of RAM (for most people a 16GB limit won't be a problem, but it's worth keeping in mind). If you're running Mac OS X, you don't need to worry about 32-bit vs 64-bit, and if you're running Linux, you probably know this stuff already.

What about you? Have you made the switch to a 64-bit operating system? Let's hear what you're using, and how long you've been living the 64-bit life, in the comments.

Article

Converting 32-bit Applications Into 64-bit Applications: Things to Consider


Print-friendly Version By The Sun Studio Team, January 2005

The principal cause of problems when converting 32-bit applications to 64-bit applications is the change in size of the int type with respect to the long and pointer types. When converting 32-bit programs to 64-bit programs, only long types and pointer types change in size from 32 bits to 64 bits; integers of type int stay at 32 bits in size. This can cause trouble with data truncation when assigning pointer or long types to int types. Also, problems with sign extension can occur when assigning expressions using types shorter than the size of an int to an unsigned long or a pointer. This article discusses how to avoid or eliminate these problems.

Consider the Differences Between the 32-bit and 64-bit Data Models
The biggest difference between the 32-bit and the 64-bit compilation environments is the change in data-type models. The C data-type model for 32-bit applications is the ILP32 model, so named because the int and long types, and pointers, are 32-bit data types. The data-type model for 64-bit applications is the LP64 data model, so named because long and pointer types grow to 64 bits. The remaining C integer types and the floating-point types are the same in both data-type models. It is not unusual for current 32-bit applications to assume that the int type, long type, and pointers are the same size. Because the size of long and pointer change in the LP64 data model, this change alone is the principal cause of ILP32-to-LP64 conversion problems.

Use the lint Utility to Detect Problems with 64-bit long and Pointer Types
Use lint to check code that is written for both the 32-bit and the 64-bit compilation environment. Specify the -errchk=longptr64 option to generate LP64 warnings. Also use the -errchk=longptr64 flag which checks portability to an environment for which the size of long integers and pointers is 64 bits and the size of plain integers is 32 bits. The -errchk=longptr64 flag checks assignments of pointer expressions and long integer expressions to plain integers, even when explicit casts are used. Use the -errchk=longptr64,signext option to find code where the normal ISO C value-preserving rules allow the extension of the sign of a signed-integral value in an expression of unsigned-integral type. Use the xarch=v9 option of lint when you want to check code that you intend to run in the Solaris 64-bit SPARC compilation environment only. Use -xarch=amd64 when you want to check code you intend to run in the x86 64-bit environment. When lint generates warnings, it prints the line number of the offending code, a message that describes the problem, and whether or not a pointer is involved. The warning message also indicates the sizes of the involved data types. When you know a pointer is involved and you know the size of the data types, you can find specific 64-bit problems and avoid the pre-existing problems between 32-bit and smaller types. You can suppress the warning for a given line of code by placing a comment of the form "NOTE(LINTED(<optional message>))" on the previous line. This is useful when you want lint to ignore certain lines of code such as casts and assignments. Exercise extreme care when you use the "NOTE(LINTED(<optional message>))" comment because it can mask real problems. When you use NOTE,

also include #include<note.h>. Refer to the lint man page for more information.

Check for Changes of Pointer Size With Respect to the Size of Plain Integers
Since plain integers and pointers are the same size in the ILP32 compilation environment, 32-bit code commonly relies on this assumption. Pointers are often cast to int or unsigned int for address arithmetic. You can cast your pointers to unsigned long because long and pointer types are the same size in both ILP32 and LP64 data-type models. However, rather than explicitly using unsigned long, use uintptr_t instead because it expresses your intent more closely and makes the code more portable, insulating it against future changes. To use the uintptr_t and intptr_t you need to #include <inttypes.h>. Consider the following example:
char *p; p = (char *) ((int)p & PAGEOFFSET); % cc .. warning: conversion of pointer loses bits

The following version will function correctly when compiled to both 32-bit and 64-bit targets:
char *p; p = (char *) ((uintptr_t)p & PAGEOFFSET);

Check for Changes in Size of Long Integers With Respect to the Size of Plain Integers
Because integers and longs are never really distinguished in the ILP32 data-type model, your existing code probably uses them indiscriminately. Modify any code that uses integers and longs interchangeably so it conforms to the requirements of both the ILP32 and LP64 data-type models. While an integer and a long are both 32-bits in the ILP32 data-type model, a long is 64 bits in the LP64 data-type model. Consider the following example:
int waiting; long w_io; long w_swap; ... waiting = w_io + w_swap; % cc warning: assignment of 64-bit integer to 32-bit integer

Check for Sign Extensions


Sign extension is a common problem when you convert to the 64-bit compilation environment because the type conversion and promotion rules are somewhat obscure. To prevent sign-extension problems, use explicit casting to achieve the intended results. To understand why sign extension occurs, it helps to understand the conversion rules for ISO C. The conversion rules that seem to cause the most sign extension problems between the 32-bit and the 64-bit

compilation environment come into effect during the following operations:

Integral promotion

You can use a char, short, enumerated type, or bit-field, whether signed or unsigned, in any expression that calls for an integer. If an integer can hold all possible values of the original type, the value is converted to an integer; otherwise, the value is converted to an unsigned integer.

Conversion between signed and unsigned integers

When an integer with a negative sign is promoted to an unsigned integer of the same or larger type, it is first promoted to the signed equivalent of the larger type, then converted to the unsigned value. When the following example is compiled as a 64-bit program, the addr variable becomes sign-extended, even though both addr and a.base are unsigned types.
%cat test.c struct foo { unsigned int base:19, rehash:13; }; main(int argc, char *argv[]) { struct foo a; unsigned long addr; a.base = 0x40000; addr = a.base << 13; /* Sign extension here! */ printf("addr 0x%lx\n", addr); addr = (unsigned int)(a.base << 13); /* No sign extension here! */ printf("addr 0x%lx\n", addr); }

This sign extension occurs because the conversion rules are applied as follows:
The structure member a.base is converted from an unsigned int bit field to an int because of the

integral promotion rule. In other words, because the unsigned 19-bit field fits within a 32-bit integer, the bit field is promoted to an integer rather than an unsigned integer. Thus, the expression a.base << 13 is of type int. If the result were assigned to an unsigned int, this would not matter because no sign extension has yet occurred. The expression a.base << 13 is of type int, but it is converted to a long and then to an unsigned long before being assigned to addr, because of signed and unsigned integer promotion rules. The sign extension occurs when performing the int to long conversion.

Thus, when compiled as a 64-bit program, the result is as follows:


% cc -o test64 -xarch=v9 test.c % ./test64 addr 0xffffffff80000000 addr 0x80000000 %

When compiled as a 32-bit program, the size of an unsigned long is the same as the size of an int, so there is no sign extension.

% cc -o test test.c % ./test addr 0x80000000 addr 0x80000000 %

Check Structure Packing


Check the internal data structures in an applications for holes; that is, extra padding appearing between fields in the structure to meet alignment requirements. This extra padding is allocated when long or pointer fields grow to 64 bits for the LP64 data-type model, and appear after an int that remains at 32 bits in size. Since long and pointer types are 64-bit aligned in the LP64 data-type model, padding appears between the int and long or pointer type. In the following example, member p is 64-bit aligned, and so padding appears between the member k and member p.
struct bar { int i; long j; int k; char *p; }; /* sizeof (struct bar) = 32 bytes */

Also, structures are aligned to the size of the largest member within them. Thus, in the above structure, padding appears between member i and member j. When you repack a structure, follow the simple rule of moving the long and pointer fields to the beginning of the structure. Consider the following structure definition:
struct bar { char *p; long j; int i; int k; }; /* sizeof (struct bar) = 24 bytes */

Check for Unbalanced Size of Union Members


Be sure to check the members of unions because their fields can change size between the ILP32 and the LP64 data-type models, making the size of the members different. In the following union, member _d and member array _l are the same size in the ILP32 model, but different in the LP64 model because long types grow to 64 bits in the LP64 model, but double types do not.
typedef union { double _d; long _l[2]; } llx_

The size of the members can be rebalanced by changing the type of the _l array member from type long to type int.

Make Sure Constant Types are Used in Constant Expressions


A lack of precision can cause the loss of data in some constant expressions. Be explicit when you specify the data types in your constant expression. Specify the type of each integer constant by adding some combination of {u,U,l,L}. You can also use casts to specify the type of a constant expression. Consider the following example:
int i = 32; long j = 1 << i; /* j will get 0 because RHS is integer expression */

The above code can be made to work as intended, by appending the type to the constant, 1, as follows:
int i = 32; long j = 1L << i; /* now j will get 0x100000000, as intended */

Check Format String Conversions


Make sure the format strings for printf(3S), sprintf(3S), scanf(3S), and sscanf(3S) can accommodate long or pointer arguments. For pointer arguments, the conversion operation given in the format string should be %p to work in both the 32-bit and 64-bit compilation environments. For long arguments, the long size specification, l, should be prepended to the conversion operation character in the format string. Also, check to be sure that buffers passed to the first argument in sprintf contain enough storage to accommodate the expanded number of digits used to convey long and pointer values. For example, a pointer is expressed by 8 hex digits in the ILP32 data model but expands to 16 in the LP64 data model.

Type Returned by sizeof() Operator is an unsigned

long

In the LP64 data-type model, sizeof() has the effective type of an unsigned long. If sizeof() is passed to a function expecting an argument of type int, or assigned or cast to an int, the truncation could cause a loss of data. This is only likely to be problematic in large database programs containing extremely long arrays.

Use Portable Data Types or Fixed Integer Types for Binary Interface Data
For data structures that are shared between 32-bit and 64-bit versions of an application, stick with data types that have a common size between ILP32 and LP64 programs. Avoid using long data types and pointers. Also, avoid using derived data types that change in size between 32-bit and 64-bit applications. For example, the following types defined in <sys/types.h> change in size between the ILP32 and LP64 data models:
clock_t, which represents the system time in clock ticks dev_t, which is used for device numbers off_t, which is used for file sizes and offsets ptrdiff_t, which is the signed integral type for the result of subtracting two pointers size_t, which reflects the size, in bytes, of objects in memory ssize_t, which is used by functions that return a count of bytes or an error indication time_t, which counts time in seconds

Using the derived data types in <sys/types.h> is a good idea for internal data, because it helps to insulate the code from data-model changes. However, preccisely because the size of these types are prone to change with the data model, using them is not recommended in data that is shared between 32-bit and 64-bit applications, or in other situations where the data size must remain fixed. Nevertheless, as with the sizeof()

operator discussed above, before making any changes to the code, consider whether the loss of precision will actually have any practical impact on the program. For binary interface data, consider using the fixed-width integer types in <inttypes.h>. These types are good for explicit binary representations of the following:

Binary interface specifications On-disk data Over the data wire Hardware registers Binary data structures

Check for Side Effects


Be aware that a type change in one area can result in an unexpected 64-bit conversion in another area. For example, check all the callers of a function that previously returned an int and now returns an ssize_t.

Consider the Effect of long Arrays on Performance


Large arrays of long or unsigned long types, can cause serious performance degradation in the LP64 datatype model as compared to arrays of int or unsigned int types. Large arrays of long types cause significantly more cache misses and consume more memory. Therefore, if int works just as well as long for the application purposes, it's better to use int rather than long. This is also an argument for using arrays of int types instead of arrays of pointers. Some C applications suffer from serious performance degradation after conversion to the LP64 data-type model because they rely on many, large, arrays of pointers.

It's not because of it being 64bit, 32 bit programs work fine under a 64 bit OS, the problem is Windows 7. You would still have the same issue if you had the 32 bit version of Win 7 installed. I found this, you can try it: To install Matlab 2007 on windows 7 1-Change Windows 7 Theme to the classic one (windows classic) 2-now the Matlab install will work correctly

To use Matlab with other windows 7 themes you have to change java used by matlab. 1- download latest java version and install it. 2- go to C:\Program Files\MATLAB\R2007a\sys\java\jre\win32 you will find a file named jer1.5.0_07 rename it to Original_jer1.5.0_07 3- go to C:\Program Files\Java you will find file named jet6 (jetX for Xversion) copie it to C:\Program Files\MATLAB\R2007a\sys\java\jre\win32 and rename it to jer1.5.0_07 Now you can use matlab with all themes.

You might also like