
ที่มาภาพ: The Register
วิศวกร Windows ใช้ ‘unroll’ ทำให้โค้ดใช้หน่วยความจำ 4 เท่า แล้วแก้ด้วยตรวจจับอัตโนมัติ
⚡ สรุป 30 วิ
ในช่วงแรกของ Windows ทีมพัฒนาต้องใช้เทคนิค ‘unroll’ เพื่อเขียนโค้ด 65,536 คำสั่ง ทำให้ขนาดโค้ดถึง 256 KB ซึ่งมากกว่าข้อมูล 64 KB สี่เท่า.…
Windows devs rerolled old code to save precious bytes
Microsoft ปรับปรุง Windows อย่างต่อเนื่องแม้บางครั้งการเปลี่ยนแปลงอาจไม่ได้ส่งผลต่อประสิทธิภาพโดยตรง อย่างไรก็ตาม มีช่วงเวลาหนึ่งที่วิศวกรของบริษัทให้ความสำคัญกับการใช้หน่วยความจำอย่างประหยัดอย่างยิ่ง นักวิศวกรรมอาวุโสของ Microsoft, Raymond Chen ได้เล่าประสบการณ์จากยุคแรกของ Windows ที่ทีมงานต้องจัดการกับการจำลองสถาปัตยกรรม x86‑32 โดยใช้เทคนิคการแปลไบนารี (binary translation) ซึ่งทำให้ต้องเผชิญกับปัญหาการใช้โค้ดเกินขนาด
Overview
ในช่วงต้นของการพัฒนาเครื่องจำลอง (emulator) สำหรับโปรเซสเซอร์ที่ไม่เปิดเผย ชื่อทีมใช้การแปลโค้ดแบบ JIT (Just‑In‑Time) เพื่อให้โค้ด x86‑32 ที่เป็น “bytecode” แปลงเป็นโค้ดเครื่องแบบ native โดยตรง การแปลนี้ทำให้ได้ประสิทธิภาพดีกว่าการจำลองแบบ interpreter อย่างเห็นได้ชัด อย่างไรก็ตาม ขณะทำการแปลงฟังก์ชันหนึ่งที่ต้องจัดสรรหน่วยความจำ 64 KB ทีมพบว่าโค้ดที่สร้างขึ้นมีขนาดใหญ่มากเกินความจำเป็น
Raymond Chen รายงานว่า ตัวคอมไพเลอร์ได้ “unroll” ลูปการเขียนไบต์ 65 536 ครั้งเป็นคำสั่ง “write byte to memory” แยกกันแต่ละคำสั่งยาว 4 ไบต์ ผลลัพธ์คือโค้ดทั้งหมดใช้พื้นที่ 256 KB เพื่อทำหน้าที่กำหนดค่าเริ่มต้นให้กับข้อมูล 64 KB เพียงเท่านั้น
Historical Context
ยุคแรกของ Windows ต้องทำงานบนฮาร์ดแวร์ที่มีทรัพยากรจำกัด ทั้งหน่วยความจำและพื้นที่จัดเก็บข้อมูลอยู่ในระดับเมกะไบต์ การใช้เทคนิค “loop unrolling” อย่างรุนแรงอาจช่วยเพิ่มความเร็วในบางกรณี แต่ในที่นี้กลับทำให้โค้ดกินหน่วยความจำหลายเท่า ทำให้ทีมงานต้องพิจารณาวิธีแก้ไขใหม่
เมื่อเวลาผ่านไป Microsoft ได้พัฒนาตัวแปลโค้ด (translator) ให้สามารถตรวจจับรูปแบบฟังก์ชันที่ไม่เหมาะสมเหล่านี้ได้โดยอัตโนมัติ การเพิ่ม “special code” เพื่อตรวจจับและแทนที่ฟังก์ชันที่มีโค้ดขนาดใหญ่ด้วยลูปที่กระชับเป็นการแสดงให้เห็นถึงแนวคิด “efficient‑first” ที่เริ่มต้นจากประสบการณ์จริง
Technical Details
- ฟังก์ชันต้องจัดสรร 64 KB ของหน่วยความจำ
- คอมไพเลอร์ได้ทำการ unroll ลูปเป็น 65 536 คำสั่ง “write byte to memory”
- แต่ละคำสั่งมีขนาด 4 ไบต์ ทำให้โค้ดทั้งหมดใช้พื้นที่ 256 KB
การทำเช่นนี้ทำให้โค้ดมีขนาดเท่ากับสี่เท่าของข้อมูลที่ต้องจัดการ ซึ่งถือว่าเป็นการใช้ทรัพยากรอย่างไม่คุ้มค่า แม้ว่าการ “unroll” จะทำให้การเขียนหน่วยความจำทำได้เร็วกว่าในระดับคล้าย “straight‑line code” แต่ผลเสียด้านขนาดของไบนารีก็ชัดเจน
Engineering Response
ทีมงานจำลอง CPU ได้ตอบสนองต่อปัญหานี้โดยการเพิ่มโค้ดพิเศษในตัวแปลเพื่อ detect ฟังก์ชันที่มีลักษณะ “unrolled” อย่างผิดปกติ จากนั้นทำการ replace ด้วยลูปที่กระชับและมีขนาดเล็กกว่า การกระทำนี้ไม่เพียงลดขนาดของไบนารีลงจาก 256 KB ไปเหลือระดับที่สมเหตุสมผลเท่านั้น แต่ยังรักษาประสิทธิภาพการทำงานไว้ได้เช่นกัน
การตัดสินใจเช่นนี้สะท้อนให้เห็นว่า แม้ในสมัยที่ทรัพยากรค่อนข้างจำกัด วิศวกรของ Microsoft ยังให้ความสำคัญกับการหาจุดอ่อนของระบบและแก้ไขอย่างเป็นระบบ การเพิ่มฟีเจอร์ตรวจจับอัตโนมัตินี้ทำให้กระบวนการพัฒนามีความมั่นคงและสอดคล้องกับหลักการ “code efficiency” มากยิ่งขึ้น
Modern Implications
แม้ว่า Windows เวอร์ชันใหม่ ๆ จะทำงานบนฮาร์ดแวร์ที่มีประสิทธิภาพสูงกว่ามาก แต่ประเด็นเรื่อง memory efficiency ยังคงมีความสำคัญ โดยเฉพาะในสภาพแวดล้อมที่ต้องรองรับอุปกรณ์ IoT หรือระบบฝังตัวที่มีข้อจำกัดด้านหน่วยความจำ การที่ทีมงานในอดีตได้ให้ความสำคัญกับการลดขนาดโค้ดอาจเป็นบทเรียนที่มีคุณค่าให้กับการพัฒนาในปัจจุบัน
นอกจากนี้ การใช้เทคนิค “binary translation” และ “JIT compilation” ยังคงเป็นหัวใจสำคัญของหลายระบบจำลองและเครื่องเสมือน (virtualization) การเรียนรู้จากกรณีที่โค้ดถูก “unrolled” อย่างเกินจำเป็นอาจช่วยให้ผู้พัฒนาสามารถออกแบบคอมไพเลอร์และตัวแปลที่มีประสิทธิภาพมากขึ้น ลดการใช้หน่วยความจำโดยไม่เสียประสิทธิภาพ
Summary
การที่ทีมพัฒนา Windows เคยเผชิญกับโค้ดที่ใช้พื้นที่ 256 KB เพียงเพื่อกำหนดค่าให้กับข้อมูล 64 KB แสดงให้เห็นถึงความสำคัญของการจัดการหน่วยความจำอย่างมีประสิทธิภาพ แม้ในยุคที่ทรัพยากรค่อนข้างจำกัด วิศวกรก็ได้สร้างกลไกตรวจจับและแก้ไขอัตโนมัติ เพื่อลดขนาดไบนารีและรักษาประสิทธิภาพ การเรียนรู้จากประสบการณ์นี้ยังคงมีคุณค่าในการพัฒนาเทคโนโลยีสมัยใหม่.
แชร์บทความนี้:
ชอบบทความแบบนี้?
สมัคร AI Automate Weekly Newsletter — รับเคล็ดลับ AI + how-to ใหม่
ทุกสัปดาห์ตรงถึง inbox ฟรี ไม่มีสแปม
แหล่งข่าวต้นฉบับ
- ชื่อต้นฉบับ
- Windows devs rerolled old code to save precious bytes
- ผู้เขียน
- Unknown
- แหล่ง
- The Register
- วันที่เผยแพร่
- 17 มิถุนายน 2569 เวลา 19:01



