ความแตกต่างที่สำคัญ – calloc vs 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