จากบทความของ Cloudflare
เรื่อง How we saved 100 terabytes of memory by optimizing 1.1.1.1’s DNS cache
ทำการอธิบายวิธีการลดการใช้งาน memory
ด้วยการเปลี่ยนการจัดเก็บข้อมูลจาก type Vec[T> ไปเป็น
ซึ่งผมก็ไม่ค่อยรู้เรื่องเท่าไร
ดังนั้นมาลองเขียน code เพื่อทดลองดูหน่อย
น่าจะทำให้เข้าใจมากยิ่งขึ้น
เริ่มจากการเก็บข้อมูลของ Vec[T] ก่อน หรือ vector นั่นเอง
จะทำการเก็บข้อมูล 3 field คือ
- ptr คือ pointer ที่ชีไปยังตำแหน่งของข้อมูลที่จัดเก็บใน heap
- len คือ ความยาวของข้อมูล
- capacity คือ พื้นที่ว่างที่จองเอาไว้ในการเพิ่มข้อมูลในอนาคต ดังนั้นถ้ายังไม่ถูกใช้งานก็ยังต้องจองไว้เสมอ

และใช้งาน Vec ใน response ของการทำงานอีกด้วย
ซึ่งแน่นอนว่า response จะไม่ถูกแก้ไขแน่นอน
ดังนั้นเราจะเสีย memory ในส่วนของ capacity ไปเฉย ๆ !!
ดังนั้นในส่วนนี้ทาง Cloudflare จึงได้ทำการเปลี่ยนไปใช้งาน Box<[T]> หรือ box slice
ซึ่ง Box นั้นจะไม่สามารถขยายได้หลังจากสร้าง
ดังนั้นไม่จำเป็นต้องมีการเก็บ capacity

เพื่อให้เข้าใจความแตกต่างจึงลองเขียน code และดู memory ที่ใช้งานกันหน่อย
เริ่มด้วยการใช้งาน Vec และ Box
และเปลี่ยนมาใช้งาน Box
จากนั้นลองทำการสร้าง object ของทั้งคู่ขึ้นมา
และสุดท้ายของ debug และ print memory ที่ใช้งาน
เพื่อเปรียบเทียบว่าจริงหรือไม่ ?
พบว่าลดจริง ๆ ด้วย แถวลดเยอะมาก ๆ
น่าสนใจจริง ๆ สำหรับการ optimize code ในลักษณะนี้
เล็ก ๆ น้อย ๆ แต่ได้ผลที่เยอะน่าดู
ลองศึกษาและใช้งานกันดูครับ
ขอให้สนุกกับการ coding