What is the difference between standard i386 download and the amd64 download of Ubuntu 11.04? I am currently running the i386 on an amd machine, would my system work better with the amd64 download instead? (my machine was running Windows 7 64bit, but I neglected to look at that prior to installing Ubuntu).
i386 refers to the 32-bit edition and amd64 (or x86_64) refers to the 64-bit edition for Intel and AMD processors.
Wikipedia's i386 entry:
The Intel 80386, also known as the i386, or just 386, was a 32-bit microprocessor introduced by Intel in 1985... This is termed x86, IA-32, or the i386-architecture, depending on context.
Wikipedia's x86_64 entry:
x86-64 is an extension of the x86 instruction set. It supports vastly larger virtual and physical address spaces than are possible on x86, thereby allowing programmers to conveniently work with much larger data sets... After launching the architecture under the "x86-64" name, AMD renamed it AMD64... x86-64 is still used by many in the industry as a vendor-neutral term, while others, notably Sun Microsystems (now Oracle Corporation) and Microsoft, use x64.
Even if you have an intel CPU, you should use AMD64 to install 64-bit on your computer (it uses the same instruction sets).
I highly recommend using it. For the most part you will not notice a difference but for large workloads (such as video editing, gaming, etc), the computer will perform faster (the computer has the ability to calculate 2+2+2=6 instead of having to do 2+2=4+2=6 in an example). In the Windows world, a 32-bit OS will not let you use more than 3.5 Gigs of RAM on your computer (even if you have 8!). You'd need to use a 64-bit OS in order to fully use all RAM. For Linux, however, there's no such limit (thanks, Uri).
Regardless, the world has shifted from 32 bit and it's only there to support older machines that are incapable of running 64 bit.
The architecture is named after AMD because AMD invented it, with the Athlon 64. Similarly, the 32-bit i386 architecture is named after Intel's 386 processor, because it was the first of its kind, but i386 will also work on AMD processors. So yes you can use that ISO image.
The difference between amd64 and i386 is that amd64 is 64-bit while i386 is 32-bit. This is the width (in bits) of registers available in the core.
Basically the largest number that a 32-bit CPU core can handle in one go is a little over 4.29 billion while a 64-bit core can handle a number of a bit over 18.44 billion, billion.
The cores in modern PCs are capable of behaving as either a 64-bit or a 32-bit processor depending on which version of the operating system you have installed.
64-bit code tends to run faster than 32-bit code either because it can deal with bigger numbers in on go or because the 64-bit cores have more registers so can store more things without needing to put things in external memory. Though there is no guarantee that 64-bit code will run faster if the code has not been written to take advantage of the extra features of the processor.
Compiling on a 32-bit system will produce different code than a 64-bit system. You can prove this by compiling to assembly code on the two systems. Assuming your C file is myfile.c try
gcc -S myfile.c on both systems and compare myfile.s
Well written code for a 32-bit system should compile and run on a 64-bit system but not all code is well written. Many programmers make assumptions about the system that may not be true: such as register width or byte order.
Without access to your source code it's difficult to see what the problem is but a
segmenation fault indicates that an attempt has been made to access memory that does not belong to the program. This may, for example, indicate that mem_ptr is a 32-bit pointer which is fine on a 32-bit system but needs to be a 64-bit pointer on a 64-bit system.