Web3 & DApp Development Fundamentals · บทเรียน

พื้นที่จัดเก็บ หน่วยความจำ สแตก

ตำแหน่งข้อมูลของ EVM

บทเรียน 2 จาก 413 ขั้นตอน

พื้นที่จัดเก็บ หน่วยความจำ สแตก เป็นบทเรียน Web3 & DApp Development Fundamentals ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Web3 & DApp Development Fundamentals และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Web3 & DApp Development Fundamentals มีบทเรียนทั้งหมด 4 บทเรียน

ข้อมูลอยู่ที่ใดใน EVM

EVM มีพื้นที่เก็บข้อมูลหลายประเภทที่แยกจากกัน โดยแต่ละประเภทมีค่าใช้จ่ายและอายุการใช้งานแตกต่างกัน

ตำแหน่งข้อมูลหลักสามแห่งคือ สแตก หน่วยความจำ และ สตอเรจ การเลือกใช้ตำแหน่งที่เหมาะสมเป็นหัวใจสำคัญของการเขียนสัญญาที่มีประสิทธิภาพ

สแตก

สแตก คือพื้นที่ทำงานชั่วคราวของ EVM สำหรับการคำนวณ รองรับค่าได้สูงสุด 1,024 ค่า โดยแต่ละค่ามีขนาด 256 บิต

โอปโค้ดจะเพิ่มและนำค่าออกจากด้านบนสุดของสแตก สแตกมีค่าใช้จ่ายต่ำมาก แต่มีขนาดเล็กและเป็นข้อมูลชั่วคราว

PUSH1 0x02   // [2]
PUSH1 0x04   // [2, 4]
MUL          // [8]
// stack vanishes when the call ends

หน่วยความจำ

หน่วยความจำ คืออาร์เรย์ไบต์เชิงเส้นชั่วคราวที่มีอยู่ตลอดการเรียกธุรกรรมหนึ่งครั้งเท่านั้น

หน่วยความจำใช้เก็บสิ่งที่ใหญ่เกินกว่าจะอยู่ในสแตก เช่น การสร้างสตริงหรืออาร์เรย์ และจะถูกล้างให้ว่างเมื่อการเรียกสิ้นสุด

memory[0x00..0x20] = some value
// readable/writable during the call
// erased after execution ends

สตอเรจ

สตอเรจ คือสถานะถาวรของสัญญาที่เก็บไว้บนบล็อกเชนระหว่างธุรกรรม

สตอเรจเป็นพื้นที่เก็บข้อมูลแบบคีย์-ค่า ซึ่งจับคู่สล็อตขนาด 256 บิตกับค่าขนาด 256 บิต ตัวแปรสถานะในสัญญาจะอยู่ที่นี่

storage slot 0 -> owner address
storage slot 1 -> total supply
storage slot 2 -> paused flag
// persists forever on-chain

เปรียบเทียบค่าใช้จ่าย

ค่าใช้จ่ายเพิ่มขึ้นอย่างมากตามตำแหน่ง:

  • สแตก — ถูกที่สุด ใช้ gas เพียงไม่กี่หน่วยต่อการดำเนินการ
  • หน่วยความจำ — ราคาถูก และค่าใช้จ่ายเพิ่มตามขนาด
  • สตอเรจ — แพงมาก โดยเฉพาะการเขียนครั้งแรก

เหตุใดสตอเรจจึงมีราคาแพง

การเขียนสตอเรจมีค่าใช้จ่ายสูง เพราะทุกโหนดต้องเก็บข้อมูลนั้นไว้อย่างถาวร การเขียนสตอเรจใหม่ (SSTORE) อาจมีค่าใช้จ่าย 20000 gas

ด้วยเหตุนี้นักพัฒนาจึงลดการเขียนสตอเรจให้น้อยที่สุด และเลือกใช้หน่วยความจำสำหรับงานชั่วคราว

สล็อตสตอเรจและการจัดแพ็ก

สตอเรจจัดระเบียบเป็น สล็อต ขนาด 32 ไบต์ ตัวแปรขนาดเล็กสามารถ จัดแพ็ก รวมไว้ในสล็อตเดียวเพื่อประหยัด gas

ตัวอย่างเช่น ค่า uint128 สองค่าจะอยู่ร่วมกันในสล็อตขนาด 256 บิตเดียวได้

slot 0: [ uint128 a | uint128 b ]
// two values packed into one slot
// saves a storage slot = saves gas

Calldata

ตำแหน่งที่สี่คือ calldata ซึ่งเก็บข้อมูลอินพุตแบบอ่านอย่างเดียวของธุรกรรมหรือการเรียก

เป็นตำแหน่งที่มีค่าใช้จ่ายต่ำที่สุดสำหรับการอ่านอาร์กิวเมนต์ของฟังก์ชัน และไม่สามารถแก้ไขได้ จึงเหมาะสำหรับอินพุตที่ต้องการอ่านเท่านั้น

การเลือกตำแหน่งที่เหมาะสม

หลักการทั่วไป:

  • ใช้ สแตก สำหรับการคำนวณที่มีอายุสั้น
  • ใช้ หน่วยความจำ สำหรับโครงสร้างชั่วคราว
  • ใช้ สตอเรจ เฉพาะข้อมูลที่ต้องเก็บไว้อย่างถาวร
  • ใช้ calldata สำหรับอินพุตแบบอ่านอย่างเดียว

สรุปอายุการใช้งาน

ตำแหน่งแต่ละแห่งมีอายุการใช้งานแตกต่างกัน:

  • สแตกและหน่วยความจำ — สิ้นสุดเมื่อการเรียกจบลง
  • สตอเรจ — คงอยู่ถาวรบนเชน
  • calldata — มีอยู่ตลอดระยะเวลาการเรียกและอ่านได้อย่างเดียว

สรุปภาพรวม

EVM แยกข้อมูลออกเป็นสแตก หน่วยความจำ สตอเรจ และ calldata โดยเรียงคร่าว ๆ จากสิ่งที่ถูกและมีอายุสั้นที่สุดไปจนถึงสิ่งที่แพงและถาวรที่สุด

นักพัฒนาที่ดีจะลดการเขียนสตอเรจถาวรให้น้อยที่สุด

ตรวจสอบความเข้าใจ

ทดสอบความรู้เกี่ยวกับตำแหน่งข้อมูลใน EVM ของคุณ

ทบทวน: สตอเรจ หน่วยความจำ สแตก

คุณได้เรียนรู้ว่า:

  • สแตก มีราคาถูก ขนาดเล็ก และเป็นข้อมูลชั่วคราว
  • หน่วยความจำ เป็นพื้นที่ทำงานชั่วคราวสำหรับการเรียก
  • สตอเรจ เป็นข้อมูลถาวรแต่มีราคาแพง
  • calldata เป็นอินพุตแบบอ่านอย่างเดียวที่มีราคาถูก

ถัดไป: โอปโค้ดโดยละเอียด

เริ่มต้นได้ฟรี

เรียนรู้ Web3 & DApp Development Fundamentals ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
29
บทเรียน
105

คำถามที่พบบ่อย

บทเรียน “พื้นที่จัดเก็บ หน่วยความจำ สแตก” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “พื้นที่จัดเก็บ หน่วยความจำ สแตก” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Web3 & DApp Development Fundamentals ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Web3 & DApp Development Fundamentals มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “พื้นที่จัดเก็บ หน่วยความจำ สแตก”

ตำแหน่งข้อมูลของ EVM คุณปฏิบัติ Web3 & DApp Development Fundamentals ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Web3 & DApp Development Fundamentals หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Web3 & DApp Development Fundamentals บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน

บทเรียน “พื้นที่จัดเก็บ หน่วยความจำ สแตก” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Web3 & DApp Development Fundamentals นี้ได้ไหม

ได้ บทเรียน Web3 & DApp Development Fundamentals ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. เครื่องเสมือน Ethereum
  2. พื้นที่จัดเก็บ หน่วยความจำ สแตก
  3. โอปโค้ด
  4. บัญชีและสถานะ
← กลับไปที่ Web3 & DApp Development Fundamentals