หน่วยความจำฟรีใน C พร้อมฟังก์ชันฟรี

Free Memory C With Free Function



ภาษา C มีประสิทธิภาพเพียงพอที่จะรองรับการจัดการหน่วยความจำ หมายความว่าเมื่อใดก็ตามที่คุณประกาศตัวแปรปกติของประเภทข้อมูลใด ๆ ใน C ภาษาการเขียนโปรแกรมเองมีหน้าที่รับผิดชอบในการจัดสรรคืนหรือปล่อยหน่วยความจำนี้เมื่อโปรแกรมของคุณดำเนินการสำเร็จแล้ว อย่างไรก็ตาม ในกรณีของการจัดสรรหน่วยความจำแบบไดนามิก เนื่องจากคุณกำลังจัดสรรหน่วยความจำด้วยตนเอง นั่นคือเหตุผลที่คุณต้องปล่อยหน่วยความจำด้วยตนเองด้วย

ในไลบรารี stdlib.h มีฟังก์ชันเฉพาะสำหรับวัตถุประสงค์นี้ เช่น ฟังก์ชัน free() วันนี้เราจะมาสำรวจความจำเป็นในการใช้ฟังก์ชันนี้ในภาษาซี หลังจากนั้น เราจะมาดูตัวอย่างการใช้งานฟังก์ชันนี้เพื่อเพิ่มหน่วยความจำด้วยตนเองในภาษาการเขียนโปรแกรม C ใน Linux







ต้องการใช้ฟังก์ชันฟรีใน C เพื่อเพิ่มหน่วยความจำระบบ:

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



มิฉะนั้น ในที่สุดเราจะมีหน่วยความจำไม่เพียงพอ และเราจะไม่เรียกใช้โปรแกรมของเราอีกต่อไป นี่คือที่มาของฟังก์ชัน free() ของไลบรารี stdlib.h เราใช้ฟังก์ชันนี้ที่ส่วนท้ายของโปรแกรมก่อนคำสั่ง return เพื่อให้หน่วยความจำของฮีปถูกส่งคืนไปยังระบบคอมพิวเตอร์ก่อนสิ้นสุดโปรแกรมของคุณ



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





ไวยากรณ์ทั่วไปของฟังก์ชัน free() ในภาษาการเขียนโปรแกรม C มีดังนี้:

โมฆะฟรี (โมฆะ*ptr)

ในที่นี้ คีย์เวิร์ด void ก่อนฟังก์ชัน free() ระบุว่าประเภทการส่งคืนของฟังก์ชันนี้เป็นโมฆะ ตัวชี้ภายในวงเล็บจะสัมพันธ์กับตำแหน่งหน่วยความจำที่ต้องจัดสรรคืน ส่วนต่อไปนี้จะอธิบายตัวอย่างบางส่วนที่มีการใช้ฟังก์ชัน free() สำหรับการปล่อยหน่วยความจำไดนามิกที่ได้รับใน C



ตัวอย่างการใช้ฟังก์ชันฟรีใน C:

ฟังก์ชัน free() สามารถใช้กับฟังก์ชันการจัดสรรหน่วยความจำทั้งสามฟังก์ชันของไลบรารี stdlib.h ได้แก่ malloc, calloc และ realloc จำเป็นต้องใช้ฟังก์ชันนี้หลังจากระบุฟังก์ชันพื้นฐานของโปรแกรมของคุณ เพื่อให้คุณสามารถมอบหน่วยความจำฮีพที่คุณได้จัดสรรแบบไดนามิกระหว่างการทำงานของโปรแกรมกลับไปยังระบบคอมพิวเตอร์ของคุณ ตอนนี้ ให้เรามาดูตัวอย่างบางส่วนที่มีการใช้ฟังก์ชัน free() กับฟังก์ชัน malloc และ calloc ในภาษาการเขียนโปรแกรม C

ตัวอย่าง # 1: การใช้ฟังก์ชันฟรีกับ calloc ใน C:

โค้ด C สำหรับการใช้ฟังก์ชัน free() กับฟังก์ชัน calloc() ถูกแชร์ในภาพด้านล่าง:

จุดประสงค์พื้นฐานของรหัสนี้คือการกำหนดหน่วยความจำบางส่วนแบบไดนามิกด้วยความช่วยเหลือของฟังก์ชัน calloc() เพื่อสิ่งนี้ เราได้นำขนาดของหน่วยความจำไดนามิกและค่าของหน่วยความจำไดนามิกนี้เป็นอินพุตจากผู้ใช้ จากนั้น เราตั้งใจที่จะพิมพ์ค่าที่ได้มาบนเทอร์มินัล หลังจากโค้ดทั้งหมดนี้ เรามีฟังก์ชัน free() ที่จะปล่อยหน่วยความจำไดนามิกที่จัดสรรไว้เนื่องจากการเรียกใช้โปรแกรม C ของเรา

โค้ดเดียวกันเวอร์ชันที่แก้ไขเล็กน้อยยังแสดงอยู่ในภาพที่อ้างถึงด้านล่าง:

รุ่นที่แก้ไขนี้มีจุดประสงค์เพื่อพิมพ์ค่าหน่วยความจำที่จัดสรรแบบไดนามิกของเราก่อนการเริ่มต้นใช้งานด้วยตนเองเท่านั้น เราทราบดีว่าฟังก์ชัน calloc() จะเริ่มต้นหน่วยความจำทั้งหมดด้วยเลขศูนย์ก่อนที่จะเกิดการเกิดขึ้นจริง อย่างไรก็ตาม ประเด็นหลักที่ต้องสังเกตในโค้ดนี้คือ แม้ว่าโค้ดนี้จะค่อนข้างกะทัดรัดและเรียบง่าย แต่เรายังคงใช้ฟังก์ชัน free() ได้เมื่อฟังก์ชันที่ต้องการบรรลุผลสำเร็จเพียงเพื่อปล่อยหน่วยความจำฮีปที่เรามี ได้มาจากการรันโปรแกรม C นี้

ตัวอย่าง # 2: การใช้ฟังก์ชันฟรีกับ malloc ใน C:

โค้ด C สำหรับการใช้ฟังก์ชัน free() กับฟังก์ชัน malloc() ถูกแชร์ในภาพด้านล่าง:

จุดประสงค์พื้นฐานของโค้ดนี้คือการกำหนดหน่วยความจำบางส่วนแบบไดนามิกด้วยความช่วยเหลือของฟังก์ชัน malloc() สำหรับสิ่งนั้น เราได้กำหนดค่าของหน่วยความจำไดนามิกนี้ใน for loop จากนั้น เราตั้งใจที่จะพิมพ์ค่าที่ได้รับบนเทอร์มินัลด้วยความช่วยเหลือของลูปอื่น หลังจากโค้ดทั้งหมดนี้ เรามีฟังก์ชัน free() ก่อนคำสั่ง return ซึ่งจะปล่อยหน่วยความจำไดนามิกที่จัดสรรไว้อันเป็นผลมาจากการเรียกใช้โปรแกรม C ของเรา

บทสรุป:

บทความนี้เน้นย้ำถึงความสำคัญของการใช้ฟังก์ชัน free() ในภาษาการเขียนโปรแกรม C ใน Linux ผู้ใช้ส่วนใหญ่เชื่อว่าฟังก์ชันการจัดสรรของไฟล์ stdlib.h มีความสำคัญมากกว่า อย่างไรก็ตาม เมื่ออ่านบทความนี้ คุณจะเห็นได้อย่างชัดเจนว่าฟังก์ชัน free() มีความสำคัญเท่าเทียมกัน มันจะช่วยให้คุณปล่อยหน่วยความจำที่ได้มาแบบไดนามิกและรับรองว่าคุณจะไม่มีวันหมดหน่วยความจำทุกครั้งที่คุณพยายามรันโปรแกรมของคุณในอนาคต