source

기억과 관련하여 아레나라는 용어의 의미는 무엇입니까?

goodcode 2022. 8. 25. 23:49
반응형

기억과 관련하여 아레나라는 용어의 의미는 무엇입니까?

프로그래밍 개념으로 기억에 관한 책을 읽고 있어요.다음 장 중 하나에서 저자는 아레나라는 단어를 많이 사용하지만 결코 정의하지는 않는다.나는 그 단어의 의미와 기억과의 관계를 찾아봤지만 아무것도 찾지 못했다.다음은 저자가 사용하는 용어의 몇 가지 컨텍스트입니다.

「다음의 시리얼라이제이션의 예에서는, 특정의 분야로부터의 메모리 할당이라고 불리는 전략을 채용하고 있습니다.」

"...메모리 누수에 대처하거나 특정 영역에서 할당할 때 유용합니다."

"...메모리의 할당을 해제하고 싶다면 전체 영역의 할당을 해제할 것입니다."

저자는 이 용어를 한 장에 100번 이상 사용한다.용어집에서의 유일한 정의는 다음과 같습니다.

arena로부터의 할당 - arena를 먼저 할당한 후 arena 내의 할당/해제를 프로그램 자체(프로세스 메모리 매니저가 아닌)에 의해 관리하는 기술.복잡한 데이터 구조 및 오브젝트의 압축 및 시리얼화, 또는 안전에 중요한 시스템 및/또는 폴트 톨러런스 시스템의 메모리 관리에 사용됩니다.

이런 상황에서 나를 위한 무대를 정의할 수 있는 사람이 있나요?

아레나는 한 번 할당한 후 해당 메모리의 일부를 배포하여 수동으로 메모리를 관리하기 위해 사용하는 크고 연속적인 메모리입니다.예를 들어 다음과 같습니다.

char * arena = malloc(HUGE_NUMBER);

unsigned int current = 0;

void * my_malloc(size_t n) { current += n; return arena + current - n; }

중요한 것은 메모리 할당의 동작을 완전히 제어할 수 있다는 것입니다.사용자가 제어할 수 없는 유일한 것은 첫 번째 할당에 대한 단일 라이브러리 호출입니다.

일반적인 사용 사례 중 하나는 각 아레나가 하나의 고정 크기의 메모리 블록만 할당하는 것입니다.이 경우 매우 효율적인 회수 알고리즘을 작성할 수 있습니다.또 다른 활용 사례는 "태스크"당 하나의 아레나를 갖는 것입니다.이 작업을 완료하면 전체 아레나를 한 번에 해방할 수 있기 때문에 개별 할당 해제를 추적할 필요가 없습니다.

이러한 기술은 모두 매우 전문적이며, 일반적으로 자신이 무엇을 하고 있는지, 그리고 일반적인 라이브러리 할당이 충분하지 않은 이유를 정확히 알고 있는 경우에만 유용합니다.좋은 메모리 할당기는 이미 그 자체로 많은 마법을 부리고 있으며, 메모리 처리를 시작하기 전에 충분한 증거가 필요합니다.

가능한 답변으로 이걸로 하겠습니다.

•Memory Arena (also known as break space)--the area where dynamic runtime memory is stored. The memory arena consists of the heap and unused memory. The heap is where all user-allocated memory is located. The heap grows up from a lower memory address to a higher memory address.

위키피디아의 동의어를 추가합니다: 지역, 지역, 경기장, 지역 또는 기억 컨텍스트.

기본적으로는 OS에서 메모리를 가져와 분배하면 한 번에 해방됩니다.은 에 대한 작은 입니다.malloc()비용이 많이 들 수 있습니다(모든 메모리 할당에는 퍼포먼스 비용이 있습니다.프로그램의 논리 주소 공간에 메모리를 할당하는 데 걸리는 시간과 그 주소 공간을 물리 메모리에 할당하는 데 걸리는 시간).볼 파크를 알고 있는 것처럼 큰 메모리 덩어리를 입수하여 필요에 따라 변수에 할당할 수 있습니다.

그것을 'heap'의 동의어로 생각해라.일반적으로 프로세스에는 히프/아레나가 1개만 있으며 모든 메모리 할당은 여기서 이루어집니다.

다만, 퍼포먼스나 fragment화를 회피하기 위해서, 일련의 할당을 그룹화하는 경우가 있습니다.이 경우 새 힙/아레나를 할당하는 것이 좋습니다. 그런 다음 할당에 대해 할당할 힙을 결정할 수 있습니다.

예를 들어 동일한 크기의 많은 개체가 자주 할당 및 할당 해제되는 파티클 시스템이 있을 수 있습니다.메모리의 fragment화를 피하기 위해서, 이러한 파티클에만 사용되는 각 파티클을 힙으로부터 할당할 수 있습니다.기타 모든 할당은 디폴트히프에서 이루어집니다.

http://www.bozemanpass.com/info/linux/malloc/Linux_Heap_Contention.html 에서 :

libc.so.x 공유 라이브러리에는 glibc 컴포넌트가 포함되어 있으며 그 안에 힙코드가 있습니다.힙의 현재 구현에서는 아레나라고 하는 여러 개의 독립된 서브히프를 사용합니다.각 경기장에는 동시성 보호를 위한 자체 뮤텍스가 있습니다.따라서 프로세스의 힙 내에 충분한 영역과 스레드의 힙액세스를 균등하게 분산하는 메커니즘이 있는 경우 뮤텍스의 경합 가능성은 최소한으로 억제해야 합니다.이것은 할당에 적합한 것으로 판명되었습니다.malloc()에서는 현재 스레드의 현재 타깃 아레나 뮤텍스가 프리(트라이록)인지 여부를 테스트한다.그러면 경기장이 잠기고 할당이 진행됩니다.뮤텍스가 비지일 경우 나머지 각 아레나가 차례로 시도되고 뮤텍스가 비지일 경우 사용됩니다.차단하지 않고 경기장을 잠글 수 없는 경우 새로운 경기장이 만들어집니다.정의상 이 아레나는 아직 잠겨 있지 않으므로 이제 차단 없이 할당을 진행할 수 있습니다.마지막으로 스레드에 의해 마지막으로 사용된 아레나 ID는 스레드 로컬 스토리지에 유지되며, 그 스레드에 의해 다음에 malloc()가 호출될 때 시행되는 첫 번째 아레나로 사용됩니다.따라서 malloc()에 대한 모든 콜은 블로킹 없이 진행됩니다.

다음 링크도 참조할 수 있습니다.

http://www.codeproject.com/Articles/44850/Arena-Allocator-DTOR-and-Embedded-Preallocated-Buf

언급URL : https://stackoverflow.com/questions/12825148/what-is-the-meaning-of-the-term-arena-in-relation-to-memory

반응형