C++에 익숙한 친구는 C++가 프로그래머에게 메모리 관리와 같은 하드웨어를 다룰 수 있는 가능성을 제공한다는 것을 알아야 합니다. 고급 C++ 프로그래머는 C++ 프로그램의 성능을 극한까지 최적화하고 하드웨어 리소스를 소모할 수 있습니다. 이제 메모리 관리와 관련된 new 및 malloc()에 대해 이야기하고 싶습니다.
먼저 malloc()에 대해 이야기해 보겠습니다. Malloc은 C 언어에서 상속된 함수로, 반환 결과는 필요한 메모리에 대한 포인터입니다. 예는 다음과 같습니다:
/* 函数原型 其中__size是你要分配的大小,其单位是byte */ void* malloc(size_t __size); // 用例 int* pInt = (int*) malloc(sizeof(int)); // 分配了一个int double* pDoubleArray = (double*) malloc(sizeof(double) * 5); // 分配了一个double数组,其大小为5
일반적으로 malloc은 항상 메모리를 할당할 수 있습니다. 하지만 상황이 너무 부담스럽고 기억력이 부족한 상황도 있다. 이때, malloc은 널 포인터(NULL, nullptr)를 반환하게 됩니다. malloc을 사용할 때는 반환된 포인터가 null인지 매번 확인하는 것이 좋습니다.
관련 튜토리얼: C++ 비디오 튜토리얼
이제 메모리가 할당되었습니다. 프로그램이 특정 지점에 도달하면 더 이상 메모리를 원하지 않습니다. 이때 수동으로 메모리를 해제해야 합니다. 그렇지 않으면 메모리 누수가 발생합니다. free() 함수를 통해 메모리를 해제합니다. 함수 프로토타입과 사용 예는 다음과 같습니다.
// 原型 void free(void* __ptr); // 用例 free(pInt); free(pDoubleArray);
흥미로운 점은 free 함수에 전달하는 것은 단지 포인터일 뿐이라는 것입니다. 그러나 요소를 할당하든 배열을 할당하든 free입니다. can Always 이 메모리를 해제하는 데 도움을 줍니다. (free는 할당한 배열의 크기를 어떻게 알 수 있나요?)
메모리 할당 시 malloc이 수행하는 작업을 자세히 설명하겠습니다. malloc이 메모리를 할당할 때 필요한 메모리 크기를 할당할 뿐만 아니라 메모리의 헤드와 테일에 몇 가지 추가 정보(일반적으로 cookie로 알려짐)를 추가합니다. 예를 들어 DEBUG에 사용되는 정보 및 메모리 크기입니다. 이는 메모리가 얼마나 큰지 알기 때문에 메모리를 확보할 수 있는 이유를 설명합니다. 이 쿠키는 약간의 메모리를 차지한다는 점을 언급할 가치가 있습니다. . .
자, malloc이 거의 도입되었습니다. 또 말씀드리고 싶은 점은 malloc은 운영체제의 커널 기능이 아닌 제3자 기능일 뿐이라는 것입니다. 추가적인 요구 사항이 있는 경우 자신만의 malloc을 디자인할 수 있습니다. 다음으로 새로운 것에 대해 이야기하겠습니다.
New는 C++에서 제공하는 조작자(또는 키워드)입니다. 메모리 할당에도 사용됩니다. 사용 사례는 다음과 같습니다:
int* pInt = new int(3); // 分配并构造一个int double* pDoubleArray = new double[5]; // 分配了一个double数组,其大小是5 delete pInt; // 删除单元素 delete[] pDoubleArray; // 删除数组
여전히 오래된 주제입니다. 일반적으로 말하면 프로그램이 메모리를 할당할 수 있지만, 한계에 도달하면 어떻게 해야 할까요? 이때 프로그램은 std::bad_alloc 예외를 발생시킵니다. 이는 new와 malloc의 차이점 중 하나입니다. 하지만 칭찬할만한 점은 C++에서 bad_alloc 예외를 처리하는 메커니즘을 제공한다는 점입니다. 그 방법은 다음과 같습니다.
void BadAllocateHandler() { std::cout << "啊,内存分配失败了" << std::endl; exit(0); } std::set_new_handler(BadAllocateHandler);
BadAllocateHandler는 할당이 실패할 때 프로그래머가 직접 작성한 처리 함수입니다. 그리고 set_new_handler는 C++에서 제공하는 메커니즘입니다. 일반적으로 칩이 떨어졌을 때 해야 할 일은 두 가지뿐입니다. 프로그램이 종료되도록 놔두거나 할당을 계속하기 위해 다른 곳에서 일부 메모리를 파낼 방법을 찾으십시오.
new가 키워드라는 것은 이미 알고 계실 겁니다. 프로그램의 경우 모든 작업은 함수 호출로 돌아갑니다. 그렇다면 새로 태어났을 때 정확히 무슨 일이 일어났나요? 새로 만들 때 프로그램은 먼저 ::operator new() 함수를 호출합니다. 그러면 ::operator new()의 프로그램이 malloc()을 호출합니다. 아! 모든 것이 명확해졌습니다. new의 핵심은 malloc 함수를 호출하는 것입니다! ! 마찬가지로 삭제의 핵심은 free() 함수를 호출하는 것입니다.
new의 본질은 malloc을 호출하는 것이지만 new와 malloc에는 큰 차이점이 하나 있습니다. 즉, 메모리에서 new가 나온 후 new는 객체를 구성하는 데 도움이 되는 반면, malloc은 메모리만 할당합니다. 구체적인 예는 다음과 같습니다.
class MyObj { public: public MyObj(int value) : val(value) {} int val; }; MyObj* obj = new MyObj(4); MyObj* obj1 = (MyObj*) malloc(sizeof(MyObj));
new의 방법은 malloc이 메모리를 할당한 후 컴파일러가 클래스의 생성자를 직접 호출하여 이 메모리에 객체를 생성하는 것입니다. 알아채다! 컴파일러만이 클래스 생성자를 직접 호출할 수 있습니다. malloc을 사용하면 직접 객체를 생성할 수 없습니다.
위 내용은 C++ new() 및 malloc() 함수 학습의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

C#.NET 개발의 최신 개발 및 모범 사례에는 다음이 포함됩니다. 1. 비동기 프로그래밍은 응용 프로그램 응답 성을 향상시키고 Async 및 Await 키워드를 사용하여 비 차단 코드를 단순화합니다. 2. LINQ는 지연된 실행 및 표현 트리를 통해 데이터를 효율적으로 조작하는 강력한 쿼리 기능을 제공합니다. 3. 성능 최적화 제안에는 비동기 프로그래밍 사용, LINQ 쿼리 최적화, 합리적으로 메모리 관리, 코드 가독성 및 유지 보수 개선 및 단위 테스트 작성이 포함됩니다.

.NET을 사용하여 응용 프로그램을 구축하는 방법? .NET을 사용하여 응용 프로그램 빌드 응용 프로그램은 다음 단계를 통해 달성 할 수 있습니다. 1) C# 언어 및 크로스 플랫폼 개발 지원을 포함한 .NET의 기본 사항을 이해합니다. 2) .NET 생태계의 구성 요소 및 작동 원리와 같은 핵심 개념을 배우십시오. 3) 간단한 콘솔 애플리케이션에서 복잡한 WebApis 및 데이터베이스 운영에 이르기까지 기본 및 고급 사용을 마스터합니다. 4) 구성 및 데이터베이스 연결 문제와 같은 일반적인 오류 및 디버깅 기술에 익숙해야합니다. 5) 응용 프로그램 성능 최적화 및 비동기 프로그래밍 및 캐싱과 같은 모범 사례.

C#은 엔터프라이즈 레벨 애플리케이션, 게임 개발, 모바일 응용 프로그램 및 웹 개발에서 널리 사용됩니다. 1) 엔터프라이즈 레벨 애플리케이션에서 C#은 종종 asp.netcore가 webapi를 개발하는 데 사용됩니다. 2) 게임 개발에서 C#은 Unity 엔진과 결합되어 역할 제어 및 기타 기능을 실현합니다. 3) C#은 코드 유연성 및 응용 프로그램 성능을 향상시키기 위해 다형성 및 비동기 프로그래밍을 지원합니다.

C# 및 .NET은 웹, 데스크탑 및 모바일 개발에 적합합니다. 1) 웹 개발에서 ASP.NETCORE는 크로스 플랫폼 개발을 지원합니다. 2) 데스크탑 개발은 WPF 및 Winforms를 사용하여 다양한 요구에 적합합니다. 3) 모바일 개발은 Xamarin을 통한 크로스 플랫폼 응용 프로그램을 실현합니다.

C#.NET 생태계는 개발자가 응용 프로그램을 효율적으로 구축 할 수 있도록 풍부한 프레임 워크 및 라이브러리를 제공합니다. 1.asp.netCore는 고성능 웹 애플리케이션을 구축하는 데 사용되며 2.entityFrameworkCore는 데이터베이스 작업에 사용됩니다. 이러한 도구의 사용 및 모범 사례를 이해함으로써 개발자는 응용 프로그램의 품질과 성능을 향상시킬 수 있습니다.

C# .NET 앱을 Azure 또는 AWS에 배포하는 방법은 무엇입니까? 답은 Azureappservice와 Awelasticbeanstalk를 사용하는 것입니다. 1. Azure에서 Azureappservice 및 AzurePipelines를 사용하여 배포를 자동화하십시오. 2. AWS에서 Amazon Elasticbeanstalk 및 Awslambda를 사용하여 배포 및 서버리스 컴퓨팅을 구현하십시오.

C#과 .NET의 조합은 개발자에게 강력한 프로그래밍 환경을 제공합니다. 1) C#은 다형성 및 비동기 프로그래밍을 지원합니다. 2) .net은 크로스 플랫폼 기능과 동시 처리 메커니즘을 제공하여 데스크탑, 웹 및 모바일 애플리케이션 개발에 널리 사용됩니다.

.NETFramework는 소프트웨어 프레임 워크이며 C#은 프로그래밍 언어입니다. 1..netframework는 데스크탑, 웹 및 모바일 애플리케이션 개발을 지원하는 라이브러리 및 서비스를 제공합니다. 2.C#은 .NETFramework 용으로 설계되었으며 최신 프로그래밍 기능을 지원합니다. 3..NetFramework는 CLR을 통해 코드 실행을 관리하고 C# 코드는 IL로 컴파일되어 CLR에 의해 실행됩니다. 4. .NETFramework를 사용하여 응용 프로그램을 신속하게 개발하면 C#은 LINQ와 같은 고급 기능을 제공합니다. 5. 일반적인 오류에는 유형 변환 및 비동기 프로그래밍 교착 상태가 포함됩니다. 디버깅을 위해서는 VisualStudio 도구가 필요합니다.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

PhpStorm 맥 버전
최신(2018.2.1) 전문 PHP 통합 개발 도구

VSCode Windows 64비트 다운로드
Microsoft에서 출시한 강력한 무료 IDE 편집기

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

맨티스BT
Mantis는 제품 결함 추적을 돕기 위해 설계된 배포하기 쉬운 웹 기반 결함 추적 도구입니다. PHP, MySQL 및 웹 서버가 필요합니다. 데모 및 호스팅 서비스를 확인해 보세요.

드림위버 CS6
시각적 웹 개발 도구
