2014-10-14 4 views
1

예를 들어, 메모리 사용/실행 속도에 차이가 있습니까?구조체와 같은 배열의 배열 사이의 C++ 차이

struct test 
{ 
    int a; 
    float b; 
    char c; 
}; 

test ar[30]; 

int arr1[30]; 
float arr2[30]; 
char arr3[30]; 

? 우리가 작업의 안락함이나 프로그래머가하는 일에 대해 말하지 않고 실행/메모리 사용 속도 만 나타내는 척하십시오.

+0

[가능한 이유는 구조체의 크기가 각 구성원의 sizeof 합계와 같지 않습니다] (http://stackoverflow.com/questions/119123/why-isnt-sizeof-for-a-struct - 각 구성원의 합계와 같음) – CoryKramer

+1

예, 성능에는 차이가있을 수 있지만 사용 사례에 따라 크게 달라집니다 (항상 그렇듯이). 가장 좋은 방법은 유스 케이스를 측정하는 것입니다. – dyp

답변

7

확실히 메모리 사용량 측면에서.

당신은 당신이 실제로 할당되는 test ar[30]를 할당하는 경우 :
지능 - 두 번째 예를 들어 당신이 할당하는 동안 ...

플로트 - 문자 - (패딩) - INT - 플로트 - - 문자 :
INT를 - int - int - .... - float - float - ... - char - ...

그래서 메모리의 레이아웃이 완전히 달라 지므로 성능에 영향을 미칠 수 있습니다. OFC)

1

메모리 크기면에서, 컴파일러는 구조체에 패딩을 추가하여 메모리를 정렬 할 수 있으므로 sizeof (test)> sizeof (arr1) + sizeof (arr2) + sizeof (arr3)

2

실행 성능 CPU cache 때문에 차이가 있습니다. 컴파일러에게 최적화를 요청하는 경우에도 마찬가지입니다.

주어진 구조의 모든 구성원이 거의 함께 액세스되는 경우 지역이 늘어나고 캐시 누락이 줄어 듭니다.