C 언어
이 자습서에서는 예제를 통해 새 작업과 삭제 작업을 사용하여 C++에서 메모리를 효과적으로 관리하는 방법을 배웁니다.
C++를 사용하면 런타임에 변수 또는 배열의 메모리를 할당할 수 있습니다. 이것을 동적 메모리 할당이라고 합니다.
Java 및 Python과 같은 다른 프로그래밍 언어에서 컴파일러는 변수에 할당된 메모리를 자동으로 관리합니다. 하지만 C++에서는 그렇지 않습니다.
C++에서는 변수를 사용하지 않으면 동적으로 할당된 메모리를 수동으로 할당 해제해야 합니다.
new
을 사용하여 동적으로 메모리를 할당하고 할당을 해제할 수 있습니다. 및 delete
각각 연산자.
new
연산자는 변수에 메모리를 할당합니다. 예를 들어,
// declare an int pointer
int* pointVar;
// dynamically allocate memory
// using the new keyword
pointVar = new int;
// assign value to allocated memory
*pointVar = 45;
여기에서는 int
에 대해 동적으로 메모리를 할당했습니다. new
를 사용하는 변수 연산자.
포인터 pointVar를 사용했음을 주목하십시오. 메모리를 동적으로 할당합니다. new
때문입니다. 연산자는 메모리 위치의 주소를 반환합니다.
배열의 경우 new
연산자는 배열의 첫 번째 요소의 주소를 반환합니다.
위의 예에서 new
를 사용하는 구문을 볼 수 있습니다. 연산자는
pointerVariable = new dataType;
<시간> 동적으로 선언한 변수를 더 이상 사용할 필요가 없으면 변수가 차지하는 메모리를 할당 해제할 수 있습니다.
이를 위해 delete
연산자가 사용됩니다. 운영 체제에 메모리를 반환합니다. 이를 메모리 할당 해제라고 합니다. .
이 연산자의 구문은
입니다.
delete pointerVariable;
코드를 고려하십시오:
// declare an int pointer
int* pointVar;
// dynamically allocate memory
// for an int variable
pointVar = new int;
// assign value to the variable memory
*pointVar = 45;
// print the value stored in memory
cout << *pointVar; // Output: 45
// deallocate the memory
delete pointVar;
여기에서는 int
에 대해 동적으로 메모리를 할당했습니다. 포인터를 사용하는 변수 pointVar .
pointVar의 내용을 출력한 후 , delete
을 사용하여 메모리 할당을 해제했습니다. .
참고 :프로그램이 new
를 사용하여 원치 않는 메모리를 많이 사용하는 경우 , 운영 체제에 사용할 수 있는 메모리가 없기 때문에 시스템이 충돌할 수 있습니다. 이 경우 delete
운영자가 시스템 충돌을 도울 수 있습니다.
#include <iostream>
using namespace std;
int main() {
// declare an int pointer
int* pointInt;
// declare a float pointer
float* pointFloat;
// dynamically allocate memory
pointInt = new int;
pointFloat = new float;
// assigning value to the memory
*pointInt = 45;
*pointFloat = 45.45f;
cout << *pointInt << endl;
cout << *pointFloat << endl;
// deallocate the memory
delete pointInt;
delete pointFloat;
return 0;
}
출력
45 45.45
이 프로그램에서는 int
의 두 변수에 메모리를 동적으로 할당했습니다. 및 float
유형. 값을 할당하고 인쇄한 후 코드를 사용하여 마지막으로 메모리 할당을 해제합니다.
delete pointInt;
delete pointFloat;
참고: 동적 메모리 할당은 메모리 관리를 보다 효율적으로 만들 수 있습니다.
특히 배열의 경우 런타임까지 배열의 크기를 모르는 경우가 많습니다.
<시간>
// C++ Program to store GPA of n number of students and display it
// where n is the number of students entered by the user
#include <iostream>
using namespace std;
int main() {
int num;
cout << "Enter total number of students: ";
cin >> num;
float* ptr;
// memory allocation of num number of floats
ptr = new float[num];
cout << "Enter GPA of students." << endl;
for (int i = 0; i < num; ++i) {
cout << "Student" << i + 1 << ": ";
cin >> *(ptr + i);
}
cout << "\nDisplaying GPA of students." << endl;
for (int i = 0; i < num; ++i) {
cout << "Student" << i + 1 << " :" << *(ptr + i) << endl;
}
// ptr memory is released
delete[] ptr;
return 0;
}
출력
Enter total number of students: 4 Enter GPA of students. Student1: 3.6 Student2: 3.1 Student3: 3.9 Student4: 2.9 Displaying GPA of students. Student1 :3.6 Student2 :3.1 Student3 :3.9 Student4 :2.9
이 프로그램에서는 사용자에게 학생 수를 입력하고 num에 저장하도록 요청했습니다. 변수.
그런 다음 float
에 대해 동적으로 메모리를 할당했습니다. new를 사용하는 배열 .
포인터 표기법을 사용하여 배열에 데이터를 입력하고 나중에 인쇄합니다.
더 이상 배열이 필요하지 않으면 delete[] ptr;
코드를 사용하여 배열 메모리를 할당 해제합니다. .
[]
사용에 주의하세요. delete
이후 . 대괄호 []
를 사용합니다. 메모리 할당 해제가 배열의 할당 해제임을 나타내기 위해.
#include <iostream>
using namespace std;
class Student {
int age;
public:
// constructor initializes age to 12
Student() : age(12) {}
void getAge() {
cout << "Age = " << age << endl;
}
};
int main() {
// dynamically declare Student object
Student* ptr = new Student();
// call getAge() function
ptr->getAge();
// ptr memory is released
delete ptr;
return 0;
}
출력
Age = 12
이 프로그램에서는 Student
을 만들었습니다. 개인 변수 age가 있는 클래스 .
age를 초기화했습니다. 12
로 기본 생성자 Student()
에서 getAge()
함수로 값을 출력합니다. .
main()
에서 , Student
을(를) 만들었습니다. new
을 사용하는 개체 연산자를 사용하고 ptr 포인터를 사용합니다. 주소를 가리킵니다.
객체가 생성되는 순간 Student()
생성자는 age를 초기화합니다. 12
로 .
그런 다음 getAge()
코드를 사용하는 기능:
ptr->getAge();
화살표 연산자 ->
에 주목하세요. . 이 연산자는 포인터를 사용하여 클래스 멤버에 액세스하는 데 사용됩니다.
C 언어
C++이란 무엇입니까? C++는 C 프로그래밍 언어의 기능과 Simula67(첫 번째 객체 지향 언어)을 포함하는 컴퓨터 프로그래밍 언어입니다. C++는 클래스와 객체의 개념을 도입했습니다. 고급 및 저급 언어 기능을 캡슐화합니다. 따라서 중급 언어로 간주됩니다. 이전에는 C 언어의 모든 속성을 가지고 있기 때문에 C with classes라고 불렀습니다. C#이란 무엇입니까? C-Sharp는 .Net Framework에서 실행되는 Microsoft에서 개발한 개체 지향 프로그래밍 언어입니다. 강력한 유형 지정, 명령형, 선언
C 프로그래밍 언어란 무엇입니까? C는 Dennis Ritchie가 1972년 Bell Lab에서 개발한 중간 수준 프로그래밍 언어입니다. C 언어는 저수준 언어와 고급 언어의 기능을 결합합니다. 따라서 중급 언어로 간주됩니다. C는 펌웨어 및 휴대용 응용 프로그램을 개발할 수 있는 고급 클래식 유형 프로그래밍 언어입니다. C 언어는 시스템 소프트웨어 작성을 목적으로 개발되었습니다. 펌웨어 시스템 개발에 이상적인 언어입니다. C++ 프로그래밍 언어란 무엇입니까? C++는 C 프로그래밍 언어의 기능과 Simula67(첫 번째 객