ความแตกต่างระหว่าง calloc และ malloc

สารบัญ:

ความแตกต่างระหว่าง calloc และ malloc
ความแตกต่างระหว่าง calloc และ malloc

วีดีโอ: ความแตกต่างระหว่าง calloc และ malloc

วีดีโอ: ความแตกต่างระหว่าง calloc และ malloc
วีดีโอ: malloc vs calloc Differences Explained | C Programming Tutorial 2024, พฤศจิกายน
Anonim

ความแตกต่างที่สำคัญ – calloc vs malloc

ในการเขียนโปรแกรม จำเป็นต้องเก็บข้อมูล ข้อมูลจะถูกเก็บไว้ในหน่วยความจำ ตำแหน่งหน่วยความจำเหล่านี้เรียกว่าตัวแปร ตัวแปรแต่ละตัวมีประเภทเฉพาะ พวกเขาสามารถเป็นจำนวนเต็ม, ลอย, คู่, อักขระ ฯลฯ นอกจากนี้ยังมีโครงสร้างข้อมูลที่สามารถจัดเก็บคอลเลกชันต่อเนื่องขนาดคงที่ขององค์ประกอบประเภทเดียวกัน มันเป็นอาร์เรย์ โปรแกรมเมอร์ต้องประกาศขนาดอาร์เรย์ หากโปรแกรมเมอร์ประกาศอาร์เรย์ของจำนวนเต็มสำหรับห้าองค์ประกอบ จะไม่สามารถกำหนดค่าให้กับดัชนีที่สูงกว่าขนาดที่ประกาศไว้ การจัดสรรหน่วยความจำได้รับการแก้ไขแล้ว และไม่สามารถเปลี่ยนแปลงได้ในขณะใช้งานวิธีการจัดสรรหน่วยความจำอื่นคือการจัดสรรหน่วยความจำแบบไดนามิก การจัดสรรหน่วยความจำแบบไดนามิกช่วยจัดสรรหน่วยความจำเพิ่มเติมเมื่อจำเป็นและปล่อยเมื่อจำเป็น ไฟล์ส่วนหัวมีสี่ฟังก์ชันสำหรับการจัดสรรหน่วยความจำแบบไดนามิก calloc และ malloc เป็นสองหน้าที่ดังกล่าว ความแตกต่างที่สำคัญระหว่าง calloc และ malloc คือ calloc จัดสรรหน่วยความจำและเริ่มต้นบล็อกหน่วยความจำที่จัดสรรให้เป็นศูนย์ในขณะที่ malloc จัดสรรหน่วยความจำ แต่ไม่ได้เริ่มต้นหน่วยความจำที่จัดสรรให้เป็นศูนย์ การเข้าถึงเนื้อหาใน calloc จะให้ศูนย์ แต่ malloc จะให้ค่าขยะ

แคลล็อคคืออะไร

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

ความแตกต่างระหว่าง calloc และ malloc
ความแตกต่างระหว่าง calloc และ malloc

รูปที่ 01: calloc และ malloc

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

voidcalloc(size_t num, size_t size);

ดูโปรแกรม C อย่างง่ายด้านล่าง

รวม

รวม

int หลัก(){

int ptr=(int) calloc(20, sizeof(int));

if (ptr==NULL){

printf(“ไม่ได้จัดสรรหน่วยความจำ”);

}

อื่น{

printf(“จัดสรรหน่วยความจำแล้ว”);

}

คืน 0;

}

ตามโปรแกรมด้านบน บล็อกหน่วยความจำที่ต่อเนื่องกันซึ่งสามารถเก็บ 20 องค์ประกอบได้รับการจัดสรร แต่ละตัวจะมีขนาดเท่ากับจำนวนเต็ม ใช้ sizeof(int) เนื่องจากประเภทจำนวนเต็มแตกต่างกันไปตามคอมไพเลอร์ถึงคอมไพเลอร์

หากการจัดสรรหน่วยความจำสำเร็จ ระบบจะส่งคืนที่อยู่พื้นฐานของบล็อกหน่วยความจำ หมายความว่าตอนนี้พอยน์เตอร์ ptr กำลังชี้ไปที่ที่อยู่ฐานของบล็อกหน่วยความจำนั้น ภูมิภาคที่จัดสรรทั้งหมดจะเริ่มต้นเป็นศูนย์ มันจะพิมพ์ข้อความการจัดสรรหน่วยความจำ หากการจัดสรรหน่วยความจำไม่สำเร็จ ระบบจะส่งคืนตัวชี้ค่าว่าง เลยจะพิมพ์ Memory is not allocated message

มัลล็อคคืออะไร

ฟังก์ชัน malloc ใช้เพื่อจัดสรรจำนวนไบต์ที่ต้องการในหน่วยความจำ ไวยากรณ์สำหรับ malloc มีดังนี้ ขนาดแสดงหน่วยความจำที่ต้องการเป็นไบต์

void malloc(size_t_size);

ฟังก์ชัน malloc ส่งคืนตัวชี้เป็นโมฆะ ดังนั้นตัวดำเนินการ cast จะถูกใช้เพื่อส่งคืนประเภทตัวชี้ตามประเภทข้อมูลที่ต้องการ

ดูโปรแกรม C อย่างง่ายด้านล่างพร้อมฟังก์ชัน malloc

รวม

รวม

int หลัก(){

int ptr=(int) malloc (10sizeof(int));

if (ptr==NULL){

printf(“ไม่ได้จัดสรรหน่วยความจำ”);

}

อื่น{

printf(“จัดสรรหน่วยความจำแล้ว”);

}

คืน 0;

}

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

ความคล้ายคลึงกันระหว่าง calloc กับ malloc คืออะไร

  • ฟังก์ชั่นทั้งสองนี้ถูกประกาศในไฟล์ส่วนหัว เป็นไฟล์ส่วนหัวของไลบรารีมาตรฐาน
  • ทั้งสองฟังก์ชันใช้สำหรับการจัดสรรหน่วยความจำแบบไดนามิก
  • ตัวชี้ที่ส่งคืนโดย calloc และ malloc ควรถูกแคสต์เป็นประเภทเฉพาะ
  • ในการจัดสรรหน่วยความจำที่สำเร็จ ทั้งสองฟังก์ชันจะส่งคืนตัวชี้พร้อมที่อยู่พื้นฐานของบล็อกหน่วยความจำ
  • หากการจัดสรรหน่วยความจำไม่สำเร็จ ตัวชี้ว่างจะถูกส่งกลับ

calloc กับ malloc ต่างกันอย่างไร

calloc กับ malloc

calloc เป็นฟังก์ชันสำหรับการจัดสรรหน่วยความจำแบบไดนามิกในไฟล์ส่วนหัว stdlib.h ภาษา C ที่จัดสรรจำนวนไบต์เฉพาะและเริ่มต้นให้เป็นศูนย์ malloc เป็นฟังก์ชันสำหรับการจัดสรรหน่วยความจำแบบไดนามิกในไฟล์ส่วนหัว stdlib.h ภาษา C ที่จัดสรรจำนวนไบต์เฉพาะ
ความหมาย
calloc ย่อมาจากการจัดสรรต่อเนื่อง malloc ย่อมาจากการจัดสรรหน่วยความจำ
ไวยากรณ์
calloc ตามด้วยไวยากรณ์ที่คล้ายกับ void calloc(size_t_num, size_t size); malloc ทำตามไวยากรณ์ที่คล้ายกับ void malloc(size_t_size);.
จำนวนอาร์กิวเมนต์
calloc รับสองอาร์กิวเมนต์ คือจำนวนบล็อกและขนาดของแต่ละบล็อก malloc รับหนึ่งอาร์กิวเมนต์ เป็นจำนวนไบต์
ความเร็ว
calloc ใช้เวลานานกว่า malloc เล็กน้อย นั่นเป็นเพราะขั้นตอนพิเศษของการเริ่มต้นหน่วยความจำที่จัดสรรโดยศูนย์ malloc เร็วกว่า calloc

สรุป – calloc vs malloc

ในการจัดสรรหน่วยความจำแบบคงที่เช่นเราใช้อาร์เรย์ หน่วยความจำจะได้รับการแก้ไข หากเก็บองค์ประกอบน้อย หน่วยความจำที่เหลือจะสูญเปล่า นอกจากนี้ยังอาจทำให้เกิดข้อผิดพลาดเมื่อหน่วยความจำที่จัดสรรมีขนาดเล็กกว่าหน่วยความจำที่ต้องการ ดังนั้นจึงใช้การจัดสรรหน่วยความจำแบบไดนามิก ในภาษา C, calloc และ malloc ให้การจัดสรรหน่วยความจำแบบไดนามิก ความแตกต่างระหว่าง calloc และ malloc คือ calloc จัดสรรหน่วยความจำและเริ่มต้นบล็อกหน่วยความจำที่จัดสรรให้เป็นศูนย์ในขณะที่ malloc จัดสรรหน่วยความจำ แต่ไม่เริ่มต้นบล็อกหน่วยความจำให้เป็นศูนย์ Malloc รับสองอาร์กิวเมนต์ ในขณะที่ calloc รับสองอาร์กิวเมนต์

ดาวน์โหลดไฟล์ PDF ของ calloc vs malloc

คุณสามารถดาวน์โหลดไฟล์ PDF ของบทความนี้และใช้เพื่อวัตถุประสงค์ออฟไลน์ตามหมายเหตุอ้างอิง โปรดดาวน์โหลดไฟล์ PDF ที่นี่: ความแตกต่างระหว่าง calloc และ malloc

แนะนำ: