วันอังคารที่ 16 สิงหาคม พ.ศ. 2559

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

ในบทก่อนหน้าของบทเรียนนี้ คุณได้เห็นแล้วว่าหน่วยความจำต้องถูกจองก่อนสำหรับตัวแปร ก่อนที่โปรแกรมจะรัน ในบางกรณี เราอาจจะต้องการจองหน่วยความจำแบบไดนามิกส์ในเวลาที่โปรแกรมรัน
ในบท นี้ การจองหน่วยความจำแบบไดนามิส์ ในภาษา 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,
ใน ตัวอย่างนี้ เราได้เขียนโปรมแบบไดนามิกที่จะถามถึงขนาดที่เราต้องการสร้าง หลังจากนั้นเราจะจองหน่วยความจำแบบไดนามิกกับขนาดที่ใส่เข้ามา หน่วยความจำแบบไดนามิกนั้นเหมือนอาเรย์ ซึ่งมันเป็นลำดับของหน่วยความจำ เมื่อเราเสร็จสิ้นงานของเรา เราจะคืนค่าหน่วยความจำที่เราได้จองไว้

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

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

Set MongoDB in the windows path environment

  Let’s set MongoDB in the windows environment in just a few steps. Step 1: First download a suitable MongoDB version according to your mach...