ตอนที่ Microsoft เปิดตัวชุด .Net Framework ทาง Microsoft ได้เปิดตัวภาษาใหม่ขึ้นมาอีกถึง 4 ภาษาได้แก่ C#, Visual Basic .Net, Visual C++.Net และ J# ทั้ง 4 ภาษานี้จะมีสิ่งที่เหมือนกันคือ เมื่อ compiler compile code ที่ถูกเขียนโดย 4 ภาษา ตัว compiler จะสร้าง file นามสกุล exe โดยโครงสร้างภายใน file exe นี้กลับไม่ได้บรรจุ Native code เหมือนกับ UnManged code แต่ภายใน file exe ที่ถูกสร้างขึ้นมาจะประกอบไปด้วย 4 ส่วนหลักๆ ได้แก่
1) PE32/PE32+
ในส่วนนี้จะเป็นตัวบอกว่าโปรแกรม exe สามารถ execute หรือ run ได้กับชนิดของ cpu 32 bit หรือ 64 bit
ถ้าโปรแกรมมีการเขียนโปรมแกรมแบบ type-unsafe ในส่วนของ Native code ที่ได้มาจากการ compile code ก็จะบรรจุอยู่ในส่วนนี้ด้วย ผมได้อธิบายรายละเอียดของ type-safe กับ type-unsafe ที่นี้ครับ
2) CLR Header
ในส่วนนี้จะเก็บ ข้อมูลดังต่อไปนี้
- version ของ .Net Framework ที่โปรแกรมต้องการ
- เก็บตำแหน่งของ entry point. อย่างง น่ะครับ entry point คือ function void Main() นั้นเอง ฝรั่งเขาเรียกอย่างนี้แหละ ทุกโปรแกรมที่เป็นชนิด application จะต้องมี entry point เสมอน่ะครับ แต่ถ้าโปรแกรมเป็นชนิด library (compile code มาแล้วได้ file นามสกุล dll) ไม่จำเป็นต้องมี entry point
- เก็บขนาดและตำแหน่งของ meta data
3) Meta data
ในส่วนนี้จะเป็นการเก็บรายละเอียดของ Data Type ที่ถูกเรียกใช้ในโปรแกรม โดยมีการจัดเก็บในรูปแบบของตาราง ซึ่งมีทั้งหมด 2 ตารางได้แก่
- ตารางแรกจะเป็น ตารางที่เก็บข้อมูลของ Data Type และสมาชิกของ Data Type ที่โปรแกรมสร้างขึ้น
- ตารางที่สอง ก็จะเก็บ Data Type และสมาชิกของ Data Type ที่โปรแกรมมีการ reference
- ตารางแรกจะเป็น ตารางที่เก็บข้อมูลของ Data Type และสมาชิกของ Data Type ที่โปรแกรมสร้างขึ้น
- ตารางที่สอง ก็จะเก็บ Data Type และสมาชิกของ Data Type ที่โปรแกรมมีการ reference
ตัวอย่างง่ายๆ น่ะครับ
public class MyExample
{
public int i;
public MyCar myCar;
}
public class MyCar
{
public int i;
public MyCar myCar;
}
public class MyCar
{
public int door;
}
จะเห็นว่า Data Type ที่ชื่อ MyCar จะเป็นของตัวโปรแกรมเอง ดังนั้นข้อมูลของ MyCar รวมทั้ง Data Type ของสมาชิกและชื่อของสมาชิกใน MyCar จะถูกเก็บไว้ในตารางแรก
ส่วน Data Type int ซึ่งเป็น Data Type ของ System ข้อมูลของ Data Type int จึงถูกเก็บไว้ใน ตารางที่สอง ในส่วนนี้จะเก็บ Data Type int แค่ครั้งเดียวเท่านั้นแม้ว่าจะมีการเรียกใช้ 2 ที่ก็ตาม (เรียกใช้ใน MyExample และเรียกใช้ใน MyCar)
ตารางทั้งสองจะไม่มีส่วนใดในการเก็บข้อมูลของ myCar, i และ door น่ะครับ myCar, i และ door จะถูกสร้างและถูกจัดการเมื่อมีการ execute โปรแกรมหรือ run โปรแกรมนั้นเอง
4) IL language
เมื่อ compiler compile code สิ่งหนึ่งที่ compiler ทำคือทำการแปลงภาษาต้นฉบับนั้นให้เป็นภาษา IL ( intermedia language) เพราะฉนั้น code ที่เราเขียนขึ้นไม่ว่าจะเขียนด้วยภาษา C# หรือ Visual Basic .Net สุดท้ายเมื่อ compiler compile เสร็จ code ที่ถูกเขียนขึ้นมาก็จะถูกแปลงมาเป็นภาษา IL นั้นเอง
เอาล่ะซิครับ ภายใน file ชนิด Managed Code ไม่มีที่เก็บภาษา Native CPU เพื่อที่จะให้ CPU execute ได้เลย แล้วโปรแกรม Managed Code ที่เราเขียนขึ้นมามันจะสามารถทำงานได้ยังไงกันเนี้ย
พบกันตอนหน้าครับ
TuChay
เอาล่ะซิครับ ภายใน file ชนิด Managed Code ไม่มีที่เก็บภาษา Native CPU เพื่อที่จะให้ CPU execute ได้เลย แล้วโปรแกรม Managed Code ที่เราเขียนขึ้นมามันจะสามารถทำงานได้ยังไงกันเนี้ย
พบกันตอนหน้าครับ
TuChay
ไม่มีความคิดเห็น:
แสดงความคิดเห็น