โดยหลักการแล้ว:
1. เช่นเดียวกับเทมเพลต C++ สาระสำคัญของข้อมูลทั่วไปของ C# คือประเภทของประเภท
มันกำหนดประเภท และแต่ละอ็อบเจ็กต์ที่สร้างอินสแตนซ์นั้นเป็นประเภทเฉพาะ ดังนั้นจึงเรียกว่าประเภทของประเภท
2. แบ่งออกเป็นสองสถานการณ์เมื่อสร้างอินสแตนซ์:
ประเภทการอ้างอิงและประเภทค่า
เนื่องจากประเภทการอ้างอิงโดยพื้นฐานแล้วคือตัวชี้ ซึ่งเป็นที่อยู่หน่วยความจำ จำนวนไบต์ที่ใช้โดยตัวแปรตัวชี้จะเท่ากันบนเครื่องที่มีความยาวบิตที่แน่นอน ตัวอย่างเช่น เครื่อง 32 บิตใช้ 4 ไบต์
สาระสำคัญของยาชื่อสามัญคือประเภทของประเภทที่กำหนด หลังจากคอมไพล์แล้ว จะมีรหัสไบนารี่ที่อธิบายคุณลักษณะของคำจำกัดความประเภทนี้ ซึ่งจัดเก็บไว้ในหน่วยความจำ
ในที่นี้เราจะอธิบายคำจำกัดความประเภทและการจัดสรรหน่วยความจำของอ็อบเจ็กต์ที่สร้างอินสแตนซ์หลังจากคอมไพล์ซอร์สโค้ดแล้ว หลังจากคอมไพล์ซอร์สโค้ดแล้ว ไฟล์โปรแกรม (เช่น ไฟล์ exe) จะต้องถูกตั้งโปรแกรมและโหลดลงในพื้นที่หน่วยความจำระหว่างการดำเนินการ (ระบบปฏิบัติการสมัยใหม่) ใช้การแมป , ครอบครองหน่วยความจำแบบลอจิคัล, โดยใช้วิธีการเพจจิ้ง, ใช้ส่วนใดของข้อมูลเพื่อถ่ายโอนส่วนนั้นของข้อมูลไปยังหน่วยความจำกายภาพ);
เมื่อกำหนดคลาส คำอธิบายของคลาสหลังจากการคอมไพล์ (ข้อมูลเกี่ยวกับสมาชิกข้อมูลใด ฟังก์ชั่นของสมาชิกรายใด การอนุญาตที่เกี่ยวข้อง ฯลฯ) จะเป็นส่วนหนึ่งของไฟล์ exe ซึ่งจะถูกโหลดเข้าสู่หน่วยความจำหลังจากรันส่วนนี้ ข้อมูลไบนารีถูกตั้งค่าตามที่อยู่ของหน่วยความจำคือ 0x0001;
เมื่อสร้างอินสแตนซ์ของคลาสอ็อบเจ็กต์นั้นขึ้นอยู่กับภาษา ใน C ++ อ็อบเจ็กต์การสร้างอินสแตนซ์ของคลาสจะจัดสรรหน่วยความจำบนสแต็ก ใน C # อ็อบเจ็กต์การสร้างอินสแตนซ์ของคลาสจะจัดสรรหน่วยความจำบนฮีปส่วนนี้อยู่ในหน่วยความจำของโปรแกรม พื้นที่หน่วยความจำ (เช่น ระบบ Windows 32 บิต พื้นที่หน่วยความจำของโปรแกรมคือ 4G) ในหน่วยความจำที่เหลือนอกเหนือจากหน่วยความจำที่แมปโดย exe เมื่อวัตถุที่สร้างอินสแตนซ์เกินอายุการใช้งานหรือถูกปล่อยออกจากฮีป พื้นที่หน่วยความจำจะถูกส่งกลับ สู่กระบวนการ
ในทำนองเดียวกัน ข้อมูลไบนารีที่เข้ารหัสทั่วไปจะอยู่ในไฟล์ exe และโหลดลงในหน่วยความจำ
เมื่อมีการสร้างอินสแตนซ์ทั่วไป นั่นคือเมื่อมีการคอมไพล์ประเภทเฉพาะ (โปรดทราบว่ากระบวนการสร้างอินสแตนซ์ทั่วไปใน C# จะดำเนินการในระหว่างการคอมไพล์ กล่าวคือ ทั่วไปที่สร้างอินสแตนซ์ที่ใช้ในโค้ด สำหรับแต่ละประเภทเฉพาะ ไบนารี รหัสถูกสร้างขึ้นในระหว่างการคอมไพล์ และรหัสไบนารี่ของตัวทั่วไปนั้นถูกเขียนลงในไฟล์ exe) รหัสไบนารี่ของอินสแตนซ์แต่ละประเภทจำเป็นต้องใช้พื้นที่เท่าใดในไฟล์ exe
ใน C# เราต้องแยกแยะระหว่างประเภทการอ้างอิงและประเภทค่า สมมติว่าประเภทการอ้างอิงทั่วไปสร้างอินสแตนซ์สองประเภทและประเภทค่าสองประเภทในซอร์สโค้ดของโปรแกรม
จากนั้นสำหรับประเภทการอ้างอิง:
ตัวหนึ่งใช้ตัวชี้ขนาด 4 ไบต์ และสองตัวใช้ตัวชี้สองตัว ข้อมูลไบนารีชี้ไปยังประเภทที่ใช้ (เช่น myClass ใน vector<myClass> myClass เป็นประเภทคลาสที่กำหนด หลังจากการคอมไพล์ ข้อมูลไบนารีจะถูกจัดเก็บไว้ในไฟล์ exe ) (ที่อยู่แบบสัมพัทธ์จะถูกแปลงเป็นที่อยู่หน่วยความจำหลังจากโหลดลงในหน่วยความจำ) เนื่องจากอ็อบเจ็กต์อินสแตนซ์ของประเภทอ้างอิงได้รับการจัดสรรบนฮีปและดำเนินการที่รันไทม์ ในขณะนี้ จากตัวชี้ ที่อยู่จะได้รับไบนารี ข้อมูลที่อธิบายโดยประเภท myClass คำนวณพื้นที่หน่วยความจำที่อ็อบเจ็กต์ที่สร้างอินสแตนซ์ไว้ และจัดสรรไว้บนฮีป
สำหรับประเภทค่า:
ประเภทค่าประกอบด้วยโครงสร้างและประเภทข้อมูลที่กำหนดไว้ล่วงหน้า เมื่อสร้างอินสแตนซ์ทั่วไปด้วยประเภทดังกล่าว (เช่น vector<int>, vector<double>) ข้อมูลไบนารีจริงของทั้งสองคลาสจะถูกสร้างขึ้นเพื่อเป็นตัวแทนคำอธิบายคลาส ดังนั้นเมื่อสร้างอินสแตนซ์ อ็อบเจ็กต์ในโปรแกรมนั้นรวดเร็ว (แน่นอนว่าสามารถคำนวณและเข้ารหัสได้ที่รันไทม์เหมือนการอ้างอิง) แต่ประเภทของค่าจะถูกจัดสรรบนสแต็ก และความยืดหยุ่นจะหายไปเพื่อให้ได้ประสิทธิภาพ ดังนั้นให้ดำเนินการ แบบนี้)