วันจันทร์ที่ 5 เมษายน พ.ศ. 2553

Pointerกับการจองหน่วยความจำ

เราจะจองหน่วยความจำเมื่อเราต้องการให้Programของเราทำงานแบบ Dynamic แต่ถ้าเรากำหนดขนาดของตัวแปรแบบArrayเอาไว้ล่วงหน้าแล้ว ถ้าเวลาจริงเราใช้ไม่พอ ก็จะขยายขนาดของArrayไม่ได้เลย จึงต้องหันไปใช้ LinkedList แทน การจองพื้นที่หน่วยความจำใน c และ c++ ก็จะต่างกันหน่อยนึง ลองมาดูกันคับ

  • ภาษา c จะใช้ function พวก malloc,calloc ในการจองหน่วยความจำและใช้คำสั่ง free ในการคืนหน่วยความจำให้กับระบบ
  • ภาษา c++ จะใช้คำสั่ง new ในการจองหน่วยความจำ และ delete ในการคืนหน่วยความจำให้กับระบบ

เราลองมาดูตัวอย่างกันนะคับ

int *num;

*num = 72;

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

int *num;

num = new int;

*num=72;

cout<<*num<<endl;

delete num;

เมื่อเราจองหน่วยความจำได้แล้ว ข้อมูลในช่องนั้นสามารถนำไปใช้ในโปรแกรมของเราได้ ส่วนมากในการเขียนโปรแกรมทั่วๆไป เราไม่จำเป็นต้องประกาศตัวแปรPointer และจองหน่วยความจำแบบนี้เสมอไป เราก็แค่ประกาศตัวแปรแบบธรรมดาและเก็้บค่าไปเท่านั้น แต่ในการทำงานของ LinkedList นั้นจะต่างจาก array ตรงที่ linked list ไม่ได้จองหน่วยความจำทีเดียวแบบ array เช่น

int number[40];

array number ตัวนี้จะเเก็บค่าได้ 40 ตัว ขยายก็ไม่ได้ด้วย แต่ถ้าเราเปลี่ยนมาให้ LinkedList เราจะต้องจองหน่วยความจำให้กับข้อมูลที่ต้องการจะเก็บ และถ้าจะเพิ่มข้อมูลเข้าไปใน Linked List อีก ก็จองหน่วยความจำให้กับข้อมูลใหม่ และก็เชื่อมต่อเข้าไปอีกเรื่อยๆ

วิธีการของ Linked List นี้จะข่วยไม่ให้เราต้องจองหน่วยความจำเอาไว้มากมาย และจะเก็บข้อมูลเท่าที่เราต้องการจะเก็บเท่านั้น เมื่อเราลบข้อมูลในช่องใดออกไปก็จะไม่มีช่องว่างเหลือเหมือนกับarray

ไม่มีความคิดเห็น:

แสดงความคิดเห็น