ฉันคิดว่าคำถามของฉันง่ายมากแต่ฉันไม่สามารถหาคำตอบได้ ตามความเข้าใจของฉันเกี่ยวกับหน่วยความจำเสมือน:
ทุกกระบวนการจะได้รับพื้นที่ที่อยู่ติดกันซึ่งแมปกับหน่วยความจำกายภาพ
ดังนั้นโค้ดที่ฉันเขียนในโปรแกรมของฉันควรจะสามารถเข้าถึงได้ทุกที่ในหน่วยความจำเสมือนที่มอบให้ ดังนั้นฉันจึงเขียนโค้ดต่อไปนี้ในภาษา C ซึ่งส่งข้อยกเว้นประเภท "ข้อยกเว้นการละเมิดการเข้าถึง"
ฉันจะขอบคุณถ้ามีคนอธิบายเหตุผลให้ฉันฟัง
นี่คือรหัส:
int* a = 1; // pointer to 1st block of memory
*a = 5; // set the content of pointer to 5, but throws exception
every process receives a contiguous address space which is mapped to physical memory
นี่เป็นเรื่องของระบบปฏิบัติการ ขึ้นอยู่กับการจัดการหน่วยความจำfollowing code in C which throws an exception
นี่เป็นเรื่องของรหัสC
มาตรฐานC
ไม่ทราบเกี่ยวกับระบบปฏิบัติการเฉพาะที่คุณอาจมีอยู่ในใจ และไม่สามารถระบุส่วนนั้นได้ เท่าที่มาตรฐานC
ดำเนินไป หน่วยความจำที่คุณไม่ได้รับมาด้วยวิธีมาตรฐานC
บางวิธี (เช่นmalloc
หรือการกำหนดตัวแปร) ไม่มีอยู่เพื่อวัตถุประสงค์ในทางปฏิบัติ และทำให้เกิด UB (พฤติกรรมที่ไม่ได้กำหนด) หากมีการเข้าถึง - person dxiv   schedule 25.02.2016