หน่วยความจำแบบไดนามิก

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

ในบทนี้ การจองหน่วยความจำแบบไดนามิส์ ในภาษา C++ นั้นให้เราสามารถจัดการกับหน่วยความจำได้ในเวลาที่โปรแกรมทำงาน เช่น การจองหน่วยความจำ และการคืนหน่วยความจำให้กับระบบ

Operators new and new[]

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

int * mypointer;
mypointer = new int [5];

ในตัวอย่าง การจัดสรรหน่วยความจำแบบไดนามิกสำหรับตัวแปรแบบ integer 5 ตัวแปร ตอนแรกเราประกาศ mypointer ซึ่งประเภทของมันต้องตรงกันกับค่าของข้อมูลที่เราจะจัดสรรหน่วยความจำให้, int อันที่สองเราใช้คำสั่งnew เพื่อจัดสรรหน่วยความจำที่มีขนาด 5 และใส่ขนาดภายในวงเล็บ[] ซึ่งสามารถเป็นจำนวนเต็มบวก หลังจากนั้นพอยน์เตอร์จะชี้ไปยังตำแหน่งแรกของหน่วยความจำที่ได้จองไว้แล้ว

Operators delete and delete[]

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

delete mypointer;
delete[] mypointer;

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

มาดูตัวอย่างกับการใช้การจองหน่วยความจำแบบไดนามิก

#include <iostream>
#include <new>
using namespace std;

int main ()
{
int i,n;
int * p;
cout << "How much memory would you like to allocate? ";
cin >> n;
p= new (nothrow) int[n];
if (p == NULL)
cout << "Error: memory could not be allocated";
else {
for (i = 0; i < n; i++) {
cout << "Enter p[" << i << "]: ";
cin >> p[i];
}
cout << "You have entered: ";
for (i = 0; i < n; i++)
cout << p[i] << ", ";
delete[] p;
}
return 0;
}

Output

How much memory would you like to allocate? 5
Enter number for p[0]: 1
Enter number for p[1]: 2
Enter number for p[2]: 3
Enter number for p[3]: 4
Enter number for p[4]: 5
You have entered: 1, 2, 3, 4, 5,

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


บทความเกี่ยวกับ หน่วยความจำแบบไดนามิก

แนะนำภาษา C ในภาษา C

ในบทเรียนนี้ คุณจะได้เรียนภาษา C เบื้องต้น สิ่งแรกที่คุณต้องรู้คือภาษา C คืออะไร ภาษา C เป็นภาษาคอมพิวเตอร์เพื่อวัตถุประสงค์ทั่วไป เป็นภาษาที่มีความจำเป็นมาก มั...

แนะนำภาษา PHP ในภาษา PHP

ในบทแรกของการเรียนภาษา PHP เราจะแนะนำให้คุณรู้จักกับภาษาในเบื้องต้น รวมทั้งประวัติความเป็นมาและการพัฒนาของภาษา PHP PHP คือภาษาสำหรับทำงานด้านฝั่งของเซิร์ฟเวอร์ ...

ทำความรู้จักกับภาษา Java ในภาษา Java

Java เป็นภาษาเขียนโปรแกรมเพื่อวัตถุประสงค์ทั่วไป โดยสามารถทำงานได้พร้อมกัน เป็นภาษาที่สร้างมาจากคลาส และสนับสนุนการเขียนโปรแกรมแบบออบเจ็คอย่างสมบูรณ์ และถูกออก...

แนะนำภาษา Visual Basic ในภาษา Visual Basic

นี่เป็นบทแรกของการเรียนภาษา Visual Basic ก่อนที่จะเริ่มต้นกับการเขียนโปรแกรม เราจะแนะนำให้คุณรู้จักภาษา Visual Basic และประวัติความเป็นมาของภาษาก่อน และเราจะอธิ...

แนะนำให้รู้จักกับภาษา C# ในภาษา C#

ในบทเรียนนี้ คุณจะได้เรียนเกี่ยวกับภาษา C# ในพื้นฐาน ไปจนถึงขั้นสูงกับการเขียนโปรแกรมเชิงวัตถุ ก่อนที่คุณจะเริ่ม เราจะแนะนำให้คุณรู้จักกับภาษา C# เสียก่อน C# เป...