Tag: memory
21 รายการ
Blog
Zig splitScalar: เก็บช่องว่างใน CSV เล็ก ๆ ไม่ให้ข้อมูลเลื่อน
ใช้ std.mem.splitScalar แยก field ด้วย delimiter หนึ่งไบต์โดยรักษาช่องว่าง พร้อม zig test ตรวจ missing และ extra fields
Zig tokenizeSequence: แยกข้อมูลด้วย delimiter หลายไบต์แบบไม่ตัดกลาง
ใช้ std.mem.tokenizeSequence แยก record ด้วย delimiter ทั้งชุด ข้ามช่องว่างซ้ำ และทดสอบ edge case ด้วย zig test

ยอดส่งคอมลด 20.1% แต่คนรอซื้อโน้ตบุ๊กอาจไม่ได้ของถูก
ยอดส่งคอมทั่วโลกลดแรง แต่ต้นทุนหน่วยความจำยังสูง แยกตัวเลข IDC กับ Omdia และชวนวางงบซื้อ ซ่อม หรือรอโปร โดยไม่เดาราคาไทย
Zig std.mem.replace: คำนวณขนาดก่อนแทนข้อความโดยไม่เดา buffer
ใช้ replacementSize คู่กับ replace เพื่อจองปลายทางพอดี ตรวจจำนวนครั้ง และกัน output โตเกินเพดาน
Rust Vec::spare_capacity_mut: เติม buffer ที่จองไว้โดยไม่สร้าง Vec ชั่วคราว
เรียนรู้ MaybeUninit, set_len invariant และ panic boundary ผ่านตัวอย่างเติมข้อมูลที่ทดสอบจริง
Zig splitBackwardsSequence: แยก path จากด้านท้ายโดยไม่ reverse ข้อมูล
ใช้ std.mem.splitBackwardsSequence ดึงชื่อไฟล์และโฟลเดอร์จากท้าย slice พร้อมรู้ empty field, delimiter หลายไบต์ และ lifetime
Go strings.SplitAfterSeq: แบ่งข้อความแบบ iterator โดยเก็บตัวคั่นไว้
ใช้ SplitAfterSeq อ่าน record ทีละส่วนโดยไม่สร้าง slice ทั้งก้อน พร้อมทดสอบ empty separator, single-use iterator และ ownership ของ substring
Go slices.Grow กับ Clip: จองความจุให้พอ แล้วคืนส่วนเกินตรงขอบงาน
ใช้ slices.Grow ลดการขยาย backing array ซ้ำ และ slices.Clip ตัด capacity ก่อนส่งข้อมูลข้าม boundary พร้อม Go tests ที่รันจริง
Go slices.Concat: รวมหลาย slice โดยไม่ผูกผลลัพธ์กับ backing array เดิม
ใช้ slices.Concat รวมข้อมูลหลายก้อน พร้อมทดสอบ aliasing, capacity และกรณีที่ append เดิมอ่านยาก
Rust VecDeque::make_contiguous: เปิด ring buffer เป็น slice ก่อน sort
ทำให้ข้อมูลใน VecDeque ต่อเนื่องในหน่วยความจำเพื่อ sort หรือส่งต่อ API ที่รับ slice พร้อมเข้าใจต้นทุนการย้าย
Zig std.mem.rotate: หมุน slice in-place สำหรับคิวแบบวงแหวน
เข้าใจทิศทาง amount, ค่าเกินความยาว และ trade-off ของการหมุนข้อมูลจริงเทียบกับเก็บ head index
Python itertools.tee: แยก iterator ได้ แต่ต้องรู้ว่า buffer โตตรงไหน
อธิบาย shared source, backlog เมื่อ consumer วิ่งไม่เท่ากัน และวิธีเลือก list หรือ tee ให้ตรงงาน
Zig std.mem.reverse: กลับลำดับในที่เดิม พร้อมเข้าใจ slice และ mutation
ทดลอง reverse slice แบบ in-place ใน Zig 0.16 และระวังเรื่องข้อมูลต้นฉบับถูกแก้

มือถือแพงขึ้นสูงสุด 17% ในอินเดีย: เมื่อ AI แย่งกำลังผลิตแรม กระเป๋าเราต้องจ่ายด้วย
RAMageddon คืออะไร ทำไมมือถือ โน้ตบุ๊ก และเครื่องเกมเจอต้นทุนแรมแพง เจาะข่าว Galaxy S26 อินเดียที่ราคาไม่ตรงกัน พร้อมวิธีเลือกซื้อให้คุ้มสำหรับคนไทย
Python WeakValueDictionary: ทำ cache ที่ไม่ยื้ออายุ object
ใช้ weak reference ให้ cache ปล่อยค่าเมื่อไม่มีเจ้าของจริง พร้อมอธิบาย race และชนิดที่เก็บไม่ได้

Grok Build มี Memory ข้าม Session: จำ Convention ได้ แต่ต้องกันความจำปนเปื้อน
สรุป memory แบบ topic markdown ของ Grok Build, คำสั่ง /memory และ /dream พร้อมแนวทาง review, secret hygiene และอายุข้อมูล
Go 1.27 แยกทางด่วนให้ Allocation ก้อนเล็ก: เร็วขึ้นโดยไม่ต้องแก้โค้ด
เจาะกลไก size-specialized allocation ของ Go 1.27 ว่าทำไมก้อนต่ำกว่า 80 ไบต์เร็วขึ้น และจุดไหนยังควรลด allocation เอง
JDK 27: JEP 534 เปิด Compact Object Headers เป็นค่าเริ่มต้น
หลัง GA — เฮดเดอร์อ็อบเจ็กต์บน 64-bit เหลือ 64 บิตเป็นค่าเริ่มต้น ลดฮีปและเพิ่ม locality; ปิดด้วย -XX:-UseCompactObjectHeaders ถ้าจำเป็น
Python deque(maxlen): เก็บประวัติล่าสุดโดยไม่ปล่อยหน่วยความจำโตไม่จบ
ใช้ collections.deque แบบกำหนด maxlen ทำ rolling window ที่ทิ้งของเก่าอัตโนมัติ พร้อมเทสต์ลำดับและขอบเขต

JEP 534: Compact Object Headers เป็นค่าเริ่มต้นใน JDK 27
สรุป JEP 534 ที่ทำให้ compact object headers เป็นค่าเริ่มต้นใน HotSpot ของ JDK 27 พร้อมวิธีปิดถ้าจำเป็น

Rust ลด RAM ให้ DNS Cache: บทเรียนจาก 250,000 ล้านรายการของ Cloudflare
แกะ 5 แนวคิดลด memory footprint จากระบบ DNS ของ Cloudflare พร้อมตัวอย่าง Rust ที่ทดสอบจริงว่าโครงสร้างแบบ growable กับ frozen layout ต่างกันอย่างไร