C++ 메모리 분배 방식과 Windows 메모리 분배 방식

3574 단어
Windows 메모리 할당 방법
  • Win32의 무더기 분배 함수는 모든 프로세스가 무더기 분배 함수로 하나의 개인 무더기를 만들 수 있습니다. 프로세스 주소 공간을 호출하는 한 페이지 또는 여러 페이지를 만들 수 있습니다.DLL에서 만든 개인 더미는 DLL을 호출하는 프로세스의 주소 공간에 있어야 하며, 호출된 프로세스만 접근할 수 있습니다.HeapCreate는 더미를 만드는 데 사용됩니다.HeapAlloc는 무더기에서 일정 수량의 공간을 분배하는데 사용되며, HeapAlloc가 분배한 메모리는 이동할 수 없습니다.HeapSize는 더미에서 분배된 공간의 크기를 확정할 수 있습니다.HeapFree는 더미에서 분배된 공간을 방출하는 데 사용됩니다.HeapDestroy에서 만든 더미를 제거합니다.
  • 윈도의 전통적인 전역 또는 국부 메모리 분배 함수는 윈32가 평면 메모리 구조 모델을 사용하기 때문에 윈32의 전역과 국부 메모리 함수는 이름이 다른 것을 제외하고는 완전히 같다.모든 함수는 임의의 크기의 메모리를 분배할 수 있다. (사용 가능한 물리적 메모리의 제한만 받는다.)Win16과 마찬가지로 사용할 수 있습니다.Win32에서는 이러한 함수를 유지하여 Win16과 호환성을 보장합니다.
  • C 언어의 표준 메모리 분배 함수 C 언어의 표준 메모리 분배 함수는malloc,calloc,realloc,free 등을 포함한다.이 함수들은 마지막으로 API 함수를 무더기로 비추기 때문에malloc가 분배한 메모리는 이동할 수 없습니다.이 함수들의 변조 버전은malloc 이다dbg,calloc_dbg,realloc_dbg,free_dbg
  • Win32의 가상 메모리 할당 함수
  • 가상 메모리 API는 다른 API의 기반입니다.가상 메모리 API는 페이지의 최소 할당 단위이고 X86의 페이지 길이는 4KB이며 GetSystemInfo 함수로 페이지 길이를 추출할 수 있습니다.가상 메모리 할당 함수는 다음과 같습니다.
  • LPVOID VirtualAlloc(LPVOID lpvAddress,

  • DWORD cbSize,
    DWORD fdwAllocationType,
    DWORD fdwProtect);
    이 함수는 일정한 범위의 가상 페이지를 분배하는 데 쓰인다.매개 변수 1 시작 주소 지정하기;매개 변수 2 메모리 분배 길이 지정하기;매개변수 3 할당 방법을 지정하고 MEM 값을 가져옵니다.COMMINT 또는 MEMRESERVE;매개변수 4는 PAGE 의 값을 지정하여 이번에 할당된 메모리에 대한 액세스를 제어하는 ID를 지정합니다.READONLY、 PAGE_READWRITE 또는 PAGENOACCESS.
  • LPVOID VirtualAllocEx(HANDLE process,

  • LPVOID lpvAddress,
    DWORD cbSize,
    DWORD fdwAllocationType,
    DWORD fdwProtect);
    이 함수 기능은 VirtualAlloc와 유사하지만 프로세스 프로세스를 지정할 수 있습니다.VirtaulFree, VirtualProtect, VirtualQuery에 해당하는 확장 함수가 있습니다.
  • BOOL VirtualFree(LPVOID lpvAddress,

  • DWORD dwSize,
    DWORD dwFreeType);
    이 함수는 분배된 가상 메모리를 회수하거나 방출하는 데 사용된다.매개 변수 1 메모리를 회수하거나 방출하고자 하는 기본 주소를 지정합니다.만약 회수라면 매개 변수 2는 가상 주소 범위 내의 어느 곳을 가리킬 수 있으며, 만약 방출된다면 매개 변수 2는VirtualAlloc가 되돌아오는 주소가어야 한다.매개변수 3은 메모리의 방출 또는 재확보 여부를 지정하며 MEM 값을 가져옵니다.DECOMMINT 또는 MEMRELEASE.
  • BOOL VirtualProtect(LPVOID lpvAddress,

  • DWORD cbSize,
    DWORD fdwNewProtect,
    PDWORD pfdwOldProtect);
    이 함수는 분배된 페이지를 보호 페이지로 바꾸는 데 사용됩니다.매개 변수 1 분배 페이지의 기본 주소 지정하기;매개 변수 2 보호 페이지의 길이를 지정합니다.매개변수 3 지정 페이지의 보호 속성, PAGE 수치READ、PAGE_WRITE、PAGE_READWRITE 등등;매개 변수 4는 원래의 보호 속성을 되돌려줍니다.
  • DWORD VirtualQuery(LPCVOID lpAddress,

  • PMEMORY_BASIC_INFORMATION lpBuffer,
    DWORD dwLength
    );
    이 함수는 메모리에서 지정한 페이지의 특성을 조회하는 데 사용됩니다.매개 변수 1은 검색하고자 하는 가상 주소를 가리킨다.매개 변수 2는 메모리 기본 정보 구조를 가리키는 지침이다.매개변수 3은 질의의 길이를 지정합니다.
  • BOOL VirtualLock(LPVOID lpAddress,DWORD dwSize);

  • 이 함수는 메모리를 잠그는 데 사용되며, 잠긴 메모리 페이지는 페이지 파일로 교환할 수 없습니다.매개 변수 1 메모리를 잠글 시작 주소를 지정합니다.매개변수 2는 잠금 길이를 지정합니다.
  • BOOL VirtualUnLock(LPVOID lpAddress,DWORD dwSize);

  • 매개 변수 1 잠금을 해제할 메모리의 시작 주소를 지정합니다.매개변수 2는 잠금을 해제할 메모리의 길이를 지정합니다.
     
    c++의 메모리 분배 방식
             :
    1.         :                  ,               。    ,static       。
    2.      :         ,          。        。                  ,   ,     。
    3.      :      。 new/malloc   ,delete/free   。        ,  。         。
    
             
    1.        ,    。
      :              。 p!=NULL  。
    2.       ,        。
                 。       0     ,     。
      :         。
    3.       。
      :      。
    4.      ,    。
    (1)     delete free    。
      :     ,     NULL。
    (2)     delete free    。                   。
      :           。
    5.      ,      。
     new/malloc     ,  delete/free  .
      :new delete       ;malloc free       ;new[] []delete    。

    좋은 웹페이지 즐겨찾기