ความแตกต่างระหว่างamd64และi386คือamd64เป็น 64 บิตในขณะที่i386เป็น32 บิต นี่คือความกว้าง (เป็นบิต) ของการลงทะเบียนที่มีอยู่ในแกนกลาง
โดยทั่วไปจำนวนที่มากที่สุดที่คอร์ CPU แบบ 32 บิตสามารถจัดการได้ในครั้งเดียวนั้นมีขนาดเล็กกว่า 4.29 พันล้านบิตในขณะที่คอร์แบบ 64 บิตสามารถรองรับจำนวนบิตได้มากกว่า 18.44 พันล้านล้าน
แกนประมวลผลในพีซีสมัยใหม่นั้นสามารถทำงานได้ทั้งแบบ 64 บิตหรือ 32 บิตขึ้นอยู่กับรุ่นของระบบปฏิบัติการที่คุณติดตั้ง
รหัส 64 บิตมีแนวโน้มที่จะทำงานได้เร็วกว่ารหัส 32 บิตเนื่องจากสามารถจัดการกับตัวเลขที่มากขึ้นในระหว่างการเดินทางหรือเนื่องจากแกน 64 บิตมีการลงทะเบียนมากขึ้นเพื่อให้สามารถจัดเก็บสิ่งต่าง ๆ ได้มากขึ้นโดยไม่จำเป็นต้องใส่สิ่งต่างๆ แม้ว่าจะไม่มีการรับประกันว่ารหัส 64 บิตจะทำงานได้เร็วขึ้นหากยังไม่ได้เขียนรหัสเพื่อใช้ประโยชน์จากคุณสมบัติพิเศษของโปรเซสเซอร์
การคอมไพล์บนระบบ 32 บิตจะสร้างโค้ดที่แตกต่างจากระบบ 64 บิต คุณสามารถพิสูจน์ได้โดยการรวบรวมรหัสการประกอบในสองระบบ สมมติว่าไฟล์ C ของคุณคือmyfile.cลองgcc -S myfile.c
ทั้งสองระบบและเปรียบเทียบmyfile.s
รหัสที่เขียนดีสำหรับระบบ 32 บิตควรคอมไพล์และรันบนระบบ 64- บิต แต่ไม่ใช่รหัสทั้งหมดที่เขียนได้ดี โปรแกรมเมอร์จำนวนมากตั้งสมมติฐานเกี่ยวกับระบบที่อาจไม่เป็นจริงเช่นความกว้างของรีจิสเตอร์หรือลำดับไบต์
หากไม่มีการเข้าถึงซอร์สโค้ดของคุณมันยากที่จะดูว่าปัญหาคืออะไร แต่เป็นการsegmenation fault
ระบุว่ามีการพยายามเข้าถึงหน่วยความจำที่ไม่ได้เป็นของโปรแกรม ตัวอย่างเช่นสิ่งนี้อาจบ่งชี้ว่าmem_ptrเป็นตัวชี้แบบ 32 บิตซึ่งใช้ได้กับระบบ 32 บิต แต่ต้องเป็นตัวชี้แบบ 64 บิตบนระบบ 64 บิต