รูปแบบภาพใดมีประสิทธิภาพในการประหยัดหน่วยความจำมากขึ้น PNG, JPEG หรือ GIF?
รูปแบบภาพใดมีประสิทธิภาพในการประหยัดหน่วยความจำมากขึ้น PNG, JPEG หรือ GIF?
คำตอบ:
"หน่วยความจำ" และ "ประสิทธิภาพ" เป็นคำที่ใช้โดยทั่วไปในทางที่ผิดดังนั้นฉันจะให้คำตอบสำหรับองค์ประกอบที่แตกต่างกันสี่อย่างที่อาจส่งผลต่อประสิทธิภาพของเกมของคุณ
ฉันจะใช้วิธีมากเกินไปในการทำให้สั้นและกระชับ แต่มีข้อผิดพลาดมากมายในข้อความด้านล่างนี้ดังนั้นให้หยิบเกลือเล็กน้อย อย่างไรก็ตามแนวคิดหลักควรเข้าใจได้
การเก็บรักษา
นี่คือขนาดภาพที่คุณใช้ในการแจกจ่ายซอฟต์แวร์ของคุณ ยิ่งใช้ทรัพยากรของคุณมากเท่าไหร่การดาวน์โหลด (เช่นจากเว็บไซต์ของคุณ) ก็จะยิ่งมากขึ้นเท่านั้น หากคุณเผยแพร่ในสื่อที่มีอยู่จริงเช่นซีดีหรือดีวีดีคุณอาจต้องทำการปรับแต่งอย่างจริงจังในส่วนนี้
โดยทั่วไปแล้ว JPEG บีบอัดที่ดีที่สุดสำหรับภาพถ่ายและภาพที่ไม่มีเส้นขอบที่คมชัด อย่างไรก็ตามรูปภาพของคุณจะมีคุณภาพลดลงเนื่องจาก JPEG ใช้การบีบอัดแบบ lossy (คุณสามารถปรับระดับการบีบอัด / การย่อยสลายได้อย่างละเอียดเมื่อทำการส่งออกรูปภาพเป็น JPEG โปรดดูเอกสารประกอบของซอฟต์แวร์ภาพของคุณสำหรับข้อมูลเพิ่มเติม)
แต่เป็นสิ่งที่ดีเป็น JPEG อาจจะไม่สนับสนุนความโปร่งใส นี่เป็นสิ่งสำคัญหากคุณต้องการให้มีภาพที่แสดงให้คนอื่นเห็นหรือคุณต้องการภาพที่มีรูปร่างผิดปกติ GIF เป็นตัวเลือกที่ดี แต่มันถูกแทนที่โดย PNG เป็นส่วนใหญ่ (มีเพียงไม่กี่สิ่งที่ GIF สนับสนุนที่ PNG ไม่ได้ แต่พวกเขาส่วนใหญ่ไม่เกี่ยวข้องกับการเขียนโปรแกรมเกม)
PNG สนับสนุนความโปร่งใส (และความโปร่งใสกึ่งโปร่งใส) บีบอัดข้อมูลโดยไม่ลดคุณภาพ (เช่นใช้การบีบอัดแบบไม่สูญเสียข้อมูล) และบีบอัดได้ค่อนข้างดี แต่ไม่มากเท่ากับ JPG
ปัญหาเกิดขึ้นเมื่อคุณต้องการบีบอัดที่ดีเช่นเดียวกับความโปร่งใส หากคุณไม่ทราบภาพเสื่อมโทรมออกไปเล็กน้อยคุณสามารถใช้โปรแกรม PNG quantization เช่นpngquantซึ่งคุณสามารถทดสอบออนไลน์ได้ที่TinyPNG โปรดทราบว่าการย่อยสลายภาพที่ดำเนินการโดยการทำควอนไทซ์ด้วยตัวเองนั้นแตกต่างจากของ JPEG (ซึ่งรวมถึงการทำควอนตัมและเทคนิคเชิงรุกอื่น ๆ ) ดังนั้นโปรดลองด้วยการตั้งค่าที่หลากหลาย
หากคุณต้องการลดขนาดการกระจายของคุณอย่างจริงจังคุณสามารถประมวลผลภาพทุกภาพด้วยตนเองดังนี้:
if the image has transparency then
try pngquant on the image
if the results are not satisfactory then
revert to the non-quantized image
end
store as PNG
else
try storing it as JPG with different quality settings
if no single setting yields an image of an acceptable quality then
try pngquant on the image
if the results are not satisfactory then
revert to the non-quantized image
end
store as PNG
else
store as JPG
end
end
เคล็ดลับ: การเก็บรูปภาพบางรูปในรูปแบบเดียวนั้นทำได้ไม่ดีและรูปแบบอื่นในรูปแบบอื่น
มีรูปแบบเฉพาะอื่น ๆ เช่น DXT, ETC และ PVRTC พวกมันรองรับการบีบอัดและสามารถโหลดลงในหน่วยความจำได้ แต่รองรับเฉพาะ GPU ที่เฉพาะเจาะจงเท่านั้นและ GPU เหล่านี้ส่วนใหญ่รองรับเพียงหนึ่งเท่านั้นดังนั้นหากคุณไม่ทราบข้อกำหนดฮาร์ดแวร์ที่แน่นอนของฮาร์ดแวร์เป้าหมายของคุณ iPhone / iPad ซึ่งรองรับพื้นผิว PVRTC) คุณควรหลีกเลี่ยงรูปแบบเหล่านี้
โปรแกรมหน่วยความจำ
ฉันรวมไว้ที่นี่เพราะนี่คือสิ่งที่รู้จักกันโดยทั่วไป "หน่วยความจำ" อย่างไรก็ตามหากเกมของคุณใช้การเร่งความเร็วกราฟิก (และถ้าคุณสร้างเกมหลังจากปี 1998 คุณมักจะ) แล้วสิ่งเดียวที่จะใช้หน่วยความจำคือตัวอธิบายพื้นผิวของคุณ (เพียงไม่กี่ไบต์ต่อภาพ) ซึ่งเป็นเพียง ได้รับผลกระทบจากปริมาณของภาพและไม่ใช่ขนาดหรือรูปแบบ (มีสองข้อควรระวัง แต่ส่วนใหญ่ไม่เกี่ยวข้อง)
หากแพลตฟอร์มของคุณไม่มีหน่วยความจำวิดีโอเฉพาะไม่ใช่ฮาร์ดแวร์เร่งความเร็วหรือกรณีผิดปกติอื่น ๆ ส่วนถัดไปเกี่ยวกับ VRAM จะเกิดขึ้นอย่างสมบูรณ์หรือบางส่วนใน RAM แต่หลักการหลักจะเหมือนกัน
หน่วยความจำวิดีโอ
นี่คือที่ที่ภาพของคุณจะถูกเก็บไว้เมื่อโปรแกรมทำงาน โดยทั่วไปรูปแบบที่คุณเก็บไว้จะไม่สร้างความแตกต่างตรงนี้เนื่องจากรูปภาพทั้งหมดจะถูกแตกก่อนที่จะทำการโหลดลงในหน่วยความจำวิดีโอ
ทีนี้ VRAM ที่ภาพของคุณใช้ในการโหลดภาพwidth * height * bitdepth
แต่ละภาพใน VRAM จะเป็นแบบคร่าวๆ มีสองสิ่งที่ควรสังเกตที่นี่:
ความกว้างและความสูงที่ภาพของคุณถูกจัดเก็บใน VRAM ไม่จำเป็นต้องตรงกับภาพต้นฉบับของคุณ GPU บางตัวสามารถรองรับพื้นผิวที่มีขนาดเป็น 2 เท่านั้นดังนั้นรูปภาพขนาด 320x240 ของคุณอาจถูกจัดเก็บในพื้นที่ 512x256 ใน VRAM ด้วยหน่วยความจำที่ไม่ได้ใช้อย่างมีประสิทธิภาพ บางครั้งคุณไม่ได้รับอนุญาตให้โหลดพื้นผิวที่มีขนาดที่ไม่ใช่พลังของ 2 (เช่นใน GLES 1.1)
ดังนั้นหากคุณต้องการลดการใช้งาน VRAM ให้น้อยที่สุดคุณอาจต้องการพิจารณาลดขนาดรูปภาพของคุณและปรับขนาดด้วยพลังของ 2 ซึ่งจะได้ประโยชน์จากการเปลี่ยนสถานะการเรนเดอร์น้อยลงเมื่อเรนเดอร์ เพิ่มเติมเกี่ยวกับเรื่องนี้ในภายหลัง
ความลึกเป็นสิ่งสำคัญมาก โดยปกติพื้นผิวจะถูกโหลดลงใน VRAM ใน ARGB แบบ 32 บิตหรือ XRGB แบบ 32 บิต แต่ถ้าฮาร์ดแวร์ของคุณสามารถรองรับความลึก 16 บิตและคุณไม่ทราบว่าจะมีความลึกบิตที่ต่ำกว่าคุณสามารถ VRAM ที่ใช้ในแต่ละภาพได้ครึ่งหนึ่ง ซึ่งอาจเป็นสิ่งที่น่าสนใจที่ต้องพิจารณา
แต่ไม่ว่าคุณจะทำอะไรปัจจัยที่สำคัญที่สุดในการพิจารณาจำนวน VRAM ที่เกมของคุณใช้คือจำนวนภาพที่คุณมีใน VRAM ในเวลาที่กำหนด นี่คือจำนวนที่คุณน่าจะต้องการให้ต่ำที่สุดเท่าที่จะเป็นไปได้หากคุณต้องการเกมที่มีประสิทธิภาพดี การโหลดและการยกเลิกการโหลดพื้นผิวใน VRAM นั้นมีราคาแพงดังนั้นคุณจึงไม่สามารถโหลดภาพแต่ละภาพได้ทุกเมื่อที่คุณต้องการใช้งาน คุณจะต้องพบกับความสมดุลระหว่างการโหลดภาพที่คุณจะนำไปใช้ล่วงหน้าและยกเลิกการโหลดภาพเมื่อคุณแน่ใจว่าคุณจะไม่ใช้อีกต่อไป การทำสิ่งนี้ไม่สำคัญและคุณต้องนึกถึงกลยุทธ์ของคุณสำหรับเกมเฉพาะของคุณ
ความเร็วในการประมวลผล
แม้ว่าจะไม่ใช่ "หน่วยความจำ" แต่ก็เกี่ยวข้องกับประสิทธิภาพในเกมมาก รูปวาดมีราคาแพงและคุณต้องการให้แน่ใจว่าการเรนเดอร์ของคุณทำงานเร็วที่สุด แน่นอนที่นี่รูปแบบไม่สำคัญ แต่อย่างอื่นทำ:
ขนาดภาพ (ที่จริงแล้วมันจะเป็น "ขนาดการสุ่มตัวอย่าง"): พื้นที่ที่ใหญ่ที่สุดของภาพที่คุณจะวาดยิ่งใช้เวลามากในการวาด การแสดงภาพขนาดใหญ่ในส่วนเล็ก ๆ ของหน้าจอไม่ได้มีประสิทธิภาพมากดังนั้นจึงมีเทคนิคที่เรียกว่าการทำแผนที่ซึ่งประกอบด้วยการซื้อขาย VRAM สำหรับการเรนเดอร์ความเร็วโดยการจัดเก็บภาพของคุณหลายครั้งด้วยความละเอียดหลายครั้ง คุณต้องการคุณภาพในเวลาใดก็ตาม การทำแผนที่สามารถทำได้เมื่อโหลดภาพซึ่งจะส่งผลกระทบต่อความเร็วในการโหลดและการใช้งาน VRAM หรือเมื่อทำการประมวลผลล่วงหน้า (ด้วยการจัดเก็บภาพเดียวกันรุ่นต่าง ๆ ด้วยตนเองหรือใช้รูปแบบที่รองรับการทำแผนที่เช่น DDS) และการใช้งาน VRAM แต่จะมีผลกระทบเล็กน้อยต่อความเร็วในการโหลด
การเปลี่ยนสถานะการแสดงผล คุณมักจะต้องการวาดภาพที่แตกต่างกันหลายภาพบนหน้าจอในเวลาเดียวกัน อย่างไรก็ตาม GPU สามารถใช้ภาพต้นฉบับเดียวในเวลาใดก็ได้ (นี่ไม่เป็นความจริง แต่โปรดอดทนกับฉันที่นี่) รูปภาพที่ใช้ในปัจจุบันสำหรับการเรนเดอร์เป็นหนึ่งในสถานะการเรนเดอร์จำนวนมากและมีราคาแพง ดังนั้นถ้าคุณจะใช้ภาพเดียวกันหลาย ๆ ครั้ง (จำไว้เมื่อฉันพูดถึงแผนที่พื้นผิว ?) คุณจะสังเกตเห็นว่ามีประสิทธิภาพเพิ่มขึ้นอย่างมากหากคุณนำภาพมาใช้ซ้ำให้มากที่สุดก่อนที่คุณจะเปลี่ยนสถานะการแสดงผลและเริ่มใช้ ภาพอื่น (มีสถานะการเรนเดอร์อื่น ๆ นอกเหนือจากนี้และการปรับลำดับอย่างละเอียดเพื่อให้สิ่งที่คุณวาดเพื่อลดการเปลี่ยนแปลงสถานะการเรนเดอร์เป็นกิจกรรมที่พบบ่อยมากเมื่อเพิ่มประสิทธิภาพของเกม)
อย่างไรก็ตามการเพิ่มประสิทธิภาพการใช้ภาพเป็นหัวข้อที่ซับซ้อนมากและสิ่งที่ฉันเขียนไว้ที่นี่เป็นภาพรวมที่กว้างและมีความซับซ้อนมากของปัจจัยบางอย่างที่คุณจะต้องพิจารณาเมื่อเขียนเกมดังนั้นฉันคิดว่ามันจะดีที่สุดถ้าคุณทำให้มันง่าย และปรับให้เหมาะสมเมื่อใดก็ตามที่คุณต้องการทำเช่นนั้นจริงๆ ส่วนใหญ่แล้วการปรับให้เหมาะสมก่อนกำหนดนั้นไม่จำเป็น (และบางครั้งอาจเป็นอันตราย) ดังนั้นจึงง่าย
setEnforcePotImages
มันปิดการบังคับใช้พลังของพื้นผิวขนาด 2 สำหรับ OpenGLES 1.0 ไม่ใช่ความคิดที่ดีเนื่องจากฮาร์ดแวร์บางตัวไม่รองรับพื้นผิวที่ไม่มีประสิทธิภาพ OpenGLES 2.0 ต้องการการสนับสนุนสำหรับพื้นผิวที่ไม่ได้ใช้พลังงานเท่ากันดังนั้นหากคุณกำหนดเป้าหมายที่ 2.0 คุณสามารถใช้พื้นผิวขนาดใดก็ได้ สำหรับข้อมูลเพิ่มเติมโปรดดูเอกสารประกอบของ libgdx
เมื่อรูปภาพถูกโหลดออกจากดิสก์และมีการจัดรูปแบบสำหรับการเรนเดอร์รูปภาพนั้นจะใช้หน่วยความจำจำนวนเท่ากันไม่ว่ารูปภาพนั้นจะถูกบันทึกลงดิสก์โดยใช้ PNG, JPEG หรือ GIF
กฎทั่วไปของหัวแม่มือ: JPEG เป็นรูปแบบที่สูญเสียและจะลดคุณภาพของภาพเพื่อทำให้ภาพมีขนาดเล็กลงบนดิสก์ ในทางกลับกัน PNG เป็นรูปแบบภาพที่ไม่มีการสูญเสียดังนั้นโดยทั่วไปจะทำให้ไฟล์มีขนาดใหญ่ขึ้นในดิสก์ GIF ยังเป็นรูปแบบที่ไม่มีการสูญเสียทางเทคนิค แต่รองรับได้สูงสุด 256 สีต่อภาพและดังนั้นรูปภาพที่มีสีสูงมักจะมีการสูญเสียคุณภาพจำนวนมากหากบันทึกเป็น GIF
นั่นเป็นเพียงการแสดงบนดิสก์เท่านั้น ในหน่วยความจำทั้งคู่จะขยายออกเป็นรูปแบบพื้นผิวเดียวกันโดยใช้หน่วยความจำในจำนวนเท่ากันไม่ว่าคุณจะบันทึกไว้ในดิสก์เป็น PNG หรือ JPEG หรือ GIF ก็ตาม
มันขึ้นอยู่กับ.
Jpeg มีประสิทธิภาพมากที่สุดสำหรับภาพถ่าย มันไม่ได้สูญเสียอะไรเลย แต่สิ่งประดิษฐ์ที่แนะนำโดยการบีบอัดจะมองเห็นได้น้อยที่สุดในกรณีใช้งานนี้
PNG นั้นไม่สูญเสียและมีประสิทธิภาพมากที่สุดสำหรับพิกเซล - อาร์ตที่มีเส้นคมและสีน้อย นอกจากนี้ยังรองรับอัลฟ่าโปร่งใส
GIF ไม่สามารถทำอะไรได้ PNG ทำได้ดีกว่านี้ยกเว้นความสามารถในการเก็บภาพเคลื่อนไหว แต่นี่จะเกี่ยวข้องในบริบทของเว็บแอปพลิเคชันเท่านั้น ในการพัฒนาเกมคุณมักสร้างภาพเคลื่อนไหวโดยใช้ spritesheet
โปรดทราบว่าเมื่อคุณใช้เอ็นจิ้นกราฟิกเช่น Libgdx จะมีการคลายการบีบอัดภาพหลังจากโหลดแล้วจากนั้นเก็บไว้ในหน่วยความจำเป็นค่า RGBA ที่ไม่บีบอัด ดังนั้นรูปแบบของภาพจึงมีความสำคัญสำหรับความเร็วในการโหลดเท่านั้นและมีพื้นที่ว่างในการใช้งาน
ฉันไม่รู้เกี่ยวกับ libgdx มากนัก แต่เกี่ยวกับรูปแบบภาพและกราฟิก:
JPEG ดีมากในกรณีของภาพถ่ายในโลกแห่งความจริง พวกมันจะสูญเสีย แต่คุณจะไม่เห็นสิ่งประดิษฐ์ในภาพถ่ายเว้นแต่ว่าคุณจะถ่ายภาพขอบคมที่มีช่องว่างสีธรรมดาเช่นเช่นข้อความที่เขียนหรือการ์ตูน ใช้สำหรับกราฟิกพื้นหลังขนาดใหญ่
GIF ล้าสมัยสามารถเก็บสีที่ถูกกำหนดไว้ (สูงสุด 8 บิตต่อพิกเซล) ด้วยสีเฉพาะหนึ่งสีเพื่อความโปร่งใสที่สมบูรณ์ ช่วยให้ภาพเคลื่อนไหวขนาดเล็กขึ้นอยู่กับเฟรม เมื่อมีสิทธิบัตรในอัลกอริทึมการบรรจุเพื่อให้ไม่สามารถใช้งานได้ทุกที่อย่างถูกกฎหมาย เนื่องจากสิทธิบัตรนั้น PNG จึงได้รับการพัฒนา
PNG เป็นบิตแมปซิปที่มากขึ้นหรือน้อยลงที่สามารถเก็บ RGB + alpha (สูงสุด 32 บิต) และรูปแบบพิกเซลอื่น ๆ มันมีความเชี่ยวชาญในการคลายไฟล์ส่วนเล็ก ๆ ของรูปภาพซึ่งสะดวกสำหรับอุปกรณ์ที่มีขนาดเล็กและช้ามาก (เช่นโทรศัพท์มือถืออายุ 10 ปี) แต่ห้องสมุดในปัจจุบันเพียงแค่แกะมันออกเป็นบิตแมปเมื่อโหลด
PNG นั้นดีกว่า GIF ในขนาดและความเร็วและฟีเจอร์ แต่ถ้าคุณต้องการเก็บบิตแมปอย่างมีประสิทธิภาพฉันขอแนะนำ: .PNM.BZ2 ([แก้ไข] เนื่องจากวิธีการบรรจุที่แตกต่างกัน. PNM.BZ2 ไม่ได้มีประสิทธิภาพมากขึ้นเสมอไป กว่า. PNG [/ แก้ไข])
PNM / PBM / PGM / PAMเป็นรูปแบบบิตแมปธรรมดาที่มีส่วนหัว KISS ในข้อความธรรมดา การใช้ gzip บนไฟล์เหล่านั้นจะทำให้ไฟล์มีขนาดใกล้เคียงกับ PNG ดังนั้น bzip2 จึงเป็นทางออกที่ดีกว่า หากคุณจะใช้บิตแมปภายในโปรแกรมของคุณคุณอาจต้องการใช้บิตแมปที่บีบอัด bzip2 ในคอนเทนเนอร์. tar หรือ. zip หากคุณไม่มี bzip2 การใช้ PNM ในคอนเทนเนอร์ zip (zip ที่มีการบีบอัดสูงสุด) อาจคล้ายกับการใช้ PNG - ดังนั้นการจัดเก็บ PNGs ในไฟล์ ZIP อาจมีประโยชน์เพียงเล็กน้อยหรือไม่มีประโยชน์ - มันน่าจะเป็นการเพิ่มเวลาในการโหลดรูปภาพ
นอกจากนั้นยังเป็นตัวเลือกที่ดีในการจัดเก็บสไปรท์ / รูปภาพขนาดเล็กหลาย ๆ ภาพในหนึ่งบิตแมปโดยเฉพาะเมื่อคุณต้องการทั้งหมดในสถานการณ์เดียวกันด้วยกัน
เนื่องจากรูปแบบการจัดเก็บข้อมูล JPEG น่าจะเป็นตัวเลือกที่ดีที่สุดสำหรับพื้นผิวบางอย่างเช่นหญ้าหรือผนังซึ่งอาจทำให้ข้อมูลสูญหายได้ ตามด้วย PNG เมื่อคุณต้องการความโปร่งใสหรือเมื่อคุณไม่สามารถชำระเงินด้วยการสูญเสียข้อมูลตัวอย่างเช่นสไปรท์ในเกม 2D (ผู้เล่นศัตรูหีบสมบัติ) คุณอาจต้องการใช้ PNG สำหรับภาพนั้น
เมื่อพูดถึงต้นทุนหน่วยความจำรูปแบบที่ใช้ในการจัดเก็บกราฟิกเกมในระบบไฟล์ไม่เกี่ยวข้องเลย ไม่ว่าคุณจะเก็บบัฟเฟอร์พิกเซลใน VRAM หรือ RAM (ตัวแสดงซอฟต์แวร์) คุณอาจเก็บมันไว้แบบไม่บีบอัดเพราะเกมต้องการการอ่านที่รวดเร็วของพิกเซลเทียบกับหน่วยความจำที่ใช้โดยบัฟเฟอร์พิกเซลแต่ละตัว
มีข้อมูลที่บีบอัดที่เก็บไว้ในหน่วยความจำไม่มีความรู้สึกยกเว้นคุณรักษาแคชบางประเภทเพื่อบันทึกการอ่านดิสก์ แต่คุณอาจต้องอ่านจากแคชนั้นไปยังสถานะที่ไม่มีการบีบอัดสำหรับภาพที่ใช้งานในเวลาที่กำหนดในเกมของคุณ
ข้อมูลรูปภาพที่บีบอัดมีความหมายมากกว่านี้เล็กน้อยหากการถอดรหัสฮาร์ดแวร์อย่างรวดเร็วเป็นไปได้ สำหรับการแมปปกติอย่างน้อยฉันจำhttp://en.wikipedia.org/wiki/3Dcนี้ เมื่อคุณสามารถบันทึก VRAM บางส่วนแล้ว ฉันยังไม่ทราบตัวอย่างอื่น ๆ ของการถอดรหัสฮาร์ดแวร์
ในการดำเนินการต่อ: ทุกรูปแบบที่ใช้สำหรับเกมของคุณเพื่อเก็บกราฟิกในที่จัดเก็บข้อมูลถาวรคุณจะต้องถอดรหัสและรักษาเวอร์ชันที่ไม่บีบอัดในหน่วยความจำแบบไดนามิกหน่วยความจำวิดีโอหรือทั้งสองอย่างเพื่อให้สามารถแสดงผลได้อย่างรวดเร็ว
ในที่สุด: ฉันเป็นเดสก์ท็อป เมื่อฉันพูดว่า "หน่วยความจำ" ฉันมักจะอ้างถึงหน่วยความจำแบบไดนามิก เมื่อฉันพูดว่า "ดิสก์", "ระบบไฟล์" หรือ "ที่เก็บข้อมูลถาวร" ฉันมักจะอ้างถึงสิ่งที่อุปกรณ์ของคุณใช้เป็นที่เก็บข้อมูลถาวรฉันมักจะคิดว่าในฮาร์ดดิสก์ เมื่อคุณพูดว่า "memory-efficiency" ฉันใช้มันเพื่อ "memory memory" ไม่ใช่ "persistent storage" เมื่อเร็ว ๆ นี้ฉันเห็นผู้คนจำนวนมากที่ใช้คำว่า "หน่วยความจำ" เพื่ออ้างถึง "พื้นที่เก็บข้อมูลถาวร" (อาจเป็นคำศัพท์ของอุปกรณ์มือถือ)