2017-10-02 1 views
0

최신 C++ 컴파일러의 다중 스레드에서 메모리 할당이 전역 잠금 액세스를 유발합니까? 컴파일러와 운영 체제에 따라 차이가 있습니까? 개별 스레드가 필요로 할 때 동적으로 할당하는 대신 미리 할당 된 전역 배열 (적은 비용으로 덜 편리함)에 소량의 데이터를 저장하는 것이 얼마나 많은 이점이 있습니까?멀티 스레드 성능에 대한 메모리 할당의 영향

+0

이것은 실제로 언어, 디자인, 요구 사항, 사용 사례, 사용 된 프레임 워크 등에 따라 달라집니다. –

답변

1

모든 스레드는 공통 가상 주소 공간을 공유하므로 힙 (malloc 또는 new)의 모든 메모리 할당은 모든 스레드가 사용하는 가상 주소 공간을 업데이트하게됩니다. 이것이 어떻게 구현되는지는 운영체제와 컴파일러에 따라 다릅니다.

할당 된 메모리가 함수 범위를 필요로하고 너무 크지 않은 경우 alloca() (또는 _alloca())를 사용하여 할당 할 수 있습니다. 스택에서 할당하는 스레드 및 함수 로컬 인스턴스 그 할당 된 메모리의.

필자가 작성한 멀티 스레드 프로그램에서 시작시 할당 된 메시지 및/또는 버퍼 "자유"풀을 사용한 다음 스레드가 메시지를 "할당하고"무료로 사용하도록했습니다. "무료"풀의 버퍼

관련 문제