เป็นไปได้หรือไม่ที่ _M_X64 จะถูกยกเลิกการตั้งค่าบนโปรเซสเซอร์ x64

Visual Studio Compilers (2005 ถึง 2008) กำหนดมาโครสี่ตัวสำหรับสภาพแวดล้อม x86/x64 บิต อ้างอิงถึงมาโครที่กำหนดไว้ล่วงหน้า

  • _M_X64 กำหนดไว้สำหรับโปรเซสเซอร์ x64
  • _M_IX86 กำหนดไว้สำหรับโปรเซสเซอร์ x86 ดูค่าสำหรับตาราง _M_IX86 ด้านล่างสำหรับข้อมูลเพิ่มเติม สิ่งนี้ไม่ได้กำหนดไว้สำหรับโปรเซสเซอร์ x64
  • _WIN32 กำหนดไว้สำหรับแอปพลิเคชันสำหรับ Win32 และ Win64 กำหนดไว้เสมอ
  • _WIN64 กำหนดไว้สำหรับแอปพลิเคชันสำหรับ Win64

ตอนนี้บนเครื่อง x32 บิต _M_X64 จะไม่ถูกตั้งค่า บนเครื่อง 64 บิต หากคุณกำลังสร้างบนสภาพแวดล้อม 32 บิต _M_X64 จะถูกยกเลิกการตั้งค่า และ _M_IX86 จะถูกกำหนด _WIN32 ถูกกำหนดเสมอโดยไม่คำนึงถึงรุ่น 32/64 บิต

ในโปรเซสเซอร์ x64 ทั้งหมด _M_X64 มีความสำคัญเป็นพิเศษหรือไม่ จะมีสถานการณ์เมื่อไม่ได้กำหนด _M_X64 เมื่อเป้าหมายคือ x64 หรือไม่


person Abhijit    schedule 24.08.2012    source แหล่งที่มา
comment
มาโครเหล่านี้ขึ้นอยู่กับเครื่องที่คอมไพเลอร์ทำงานหรือไม่ หรือมันขึ้นอยู่กับเป้าหมายที่โปรแกรมที่คอมไพล์จะทำงาน? นี่เป็นสิ่งสำคัญ เนื่องจากฉันไม่เข้าใจข้อความของคุณ Now บนเครื่อง x32 บิต IMHO มาโครเหล่านี้ขึ้นอยู่กับเป้าหมายเท่านั้น และคุณสามารถคอมไพล์เป้าหมาย 64 บนระบบ 32 บิตได้เช่นเดียวกับที่ตรงกันข้ามจริง ..   -  person Didier Trosset    schedule 24.08.2012
comment
@DidierTrosset: ถ้าฉันจำไม่ผิดเครื่อง 32 บิต (x32) ไม่สามารถสร้างโปรแกรมสำหรับเป้าหมาย 64 บิตได้ ดังนั้นฉันเชื่อว่าในเครื่องดังกล่าว _M_X64 จะไม่ถูกกำหนดไว้เสมอ   -  person Abhijit    schedule 24.08.2012
comment
@อภิจิต: ระบบ 32 บิตสามารถสร้างโค้ด 64 บิตได้อย่างง่ายดาย และแล็ปท็อป 64 บิตของฉันที่นี่สามารถสร้างโค้ดสำหรับสถาปัตยกรรมโปรเซสเซอร์ที่แตกต่างกันอย่างน้อยหกตัว (PPC, PPC64, i386, x86_64, ARMv6 และ ARMv7 นอกเหนือหัวของฉัน) สถาปัตยกรรมของระบบบิลด์ไม่มีส่วนเกี่ยวข้องกับ รหัสที่สร้างขึ้น   -  person Jonathan Grynspan    schedule 24.08.2012


คำตอบ (1)


ตอนนี้บนเครื่อง x32 บิต _M_X64 จะไม่ถูกตั้งค่า

นั่นไม่ใช่วิธีการทำงาน คอมไพเลอร์ที่คุณใช้สร้างโค้ดสำหรับสถาปัตยกรรมเป้าหมายเฉพาะ โดยไม่สนใจเครื่องของคุณ การสร้างโค้ด x64 บนเครื่อง 32 บิตนั้นเป็นไปได้มาก MSVC มี cross compiler ที่สามารถทำงานบนระบบปฏิบัติการ 32 บิต และสร้างโค้ดสำหรับ x64 ได้ และมีคอมไพเลอร์ 64 บิตที่สร้างโค้ด x64 IDE ได้รับการตั้งค่าให้ใช้ cross-compiler จริง ๆ โดยไม่คำนึงถึงระบบปฏิบัติการของคุณ

คุณสามารถดูคอมไพเลอร์เหล่านี้ที่ติดตั้งบนเครื่องของคุณ ซึ่งเป็นไดเร็กทอรีย่อย vc\bin ของไดเร็กทอรีการติดตั้ง VS ไดเร็กทอรีนั้นมีคอมไพเลอร์ 32 บิตที่สร้างโค้ด x86 ไดเรกทอรีย่อย x86_amd64 มีคอมไพเลอร์ 32 บิตที่สร้างโค้ด x64 ไดเร็กทอรีย่อย amd64 มีคอมไพเลอร์ 64 บิตที่สร้างโค้ด x64 อาจมีไดเร็กทอรีเพิ่มเติมหากคุณมีคอมไพเลอร์สำหรับคอร์ ARM ซึ่งเป็นคอมไพเลอร์แบบข้ามเสมอ

ชื่อมาโครที่คุณถามเป็นมาโครที่กำหนดไว้ล่วงหน้า รายการทั้งหมด อยู่ที่นี่< /ก>. แมโคร _M_X64 จะถูกกำหนดโดยคอมไพเลอร์ที่สร้างโค้ด x64 เสมอ

person Hans Passant    schedule 24.08.2012
comment
ขอบคุณมากสำหรับคำอธิบาย นั่นทำให้ฉันสงสัยว่าเป็นไปได้บนเครื่อง 64 บิต (โปรเซสเซอร์ 64 บิตพร้อมระบบปฏิบัติการ 64 บิต) เพื่อกำหนดเป้าหมายโปรเซสเซอร์ 64 บิต (กำหนด _M_X64) เพื่อสร้างบิลด์ 32 บิต (_WIN64 ไม่ได้กำหนดไว้) - person Abhijit; 24.08.2012
comment
คุณใช้คอมไพเลอร์ 32 บิตเพื่อสร้างโค้ด x86 อย่างง่ายดาย แน่นอนว่า _M_X64 จะไม่ถูกกำหนดไว้ ดูเหมือนว่าคุณยังคงสับสนระหว่างเครื่องที่คุณใช้คอมไพเลอร์กับสถาปัตยกรรมเป้าหมาย มุ่งเน้นไปที่ไม่สนใจเครื่องของคุณ - person Hans Passant; 25.08.2012