2010-06-10 6 views
5

64 비트 x86 Linux 플랫폼에서 g ++/Intel과 함께 자동 배열을 사용하면 상당한 CPU/메모리 오버 헤드가 발생합니까? mallocC99 가변 길이 자동 배열 성능

를 사용하는 것에 비해 새로운

  • 헤드를 사용하는 것에 비해

  • 오버 헤드 (가정 함수가 여러번 호출) 전에 손 배열을 할당 비교

    int function(int N) { 
        double array[N]; 
    
    • 오버

      N의 범위는 대략 1kb에서 16kb 사이가되어야합니다. 스택 오버런은 문제가되지 않습니다.

  • +2

    당신이 자동 배열 무엇을 의미합니까? – AraK

    +0

    오버 헤드는 무엇에 비해? – sth

    +3

    저는 C99 개정판에서 C에 추가 된 가변 길이 배열에 대해 이야기하고 있다고 생각합니다. 그게 맞는가? –

    답변

    5
    +0

    괜찮습니다. 감사합니다. 힙 할당보다 좋을 것이라고 생각했는데 링크가이를 확인하는 것 같습니다. – Anycorn

    6

    VLA와 고정 크기 어레이 간의 성능 차이는 무시할 수 있습니다. 스택을 성장시키는 양을 계산하려면 몇 가지 추가 지침이 필요할 수 있지만 실제 프로그램에서는 노이즈가 있어야합니다.

    흠, 추가 고려 사항에 따라 로컬 변수가 메모리에 레이아웃되는 방식과 다중 VLA가 있는지 여부에 따라 약간의 오버 헤드가있을 수도 있습니다.

    지역 사용자가있는 경우 (지정된 순서대로 메모리에 저장된다고 가정)를 고려하십시오. 당신이 arr2에 액세스해야 할 때마다

    int x; 
    int arr1[n]; 
    int arr2[n]; 
    

    이제, 코드베이스 포인터에 arr2의 위치를 ​​계산해야합니다.

    +0

    감사합니다. 그건 내 직감이었고, 단지 이중으로 확신하고 싶었습니다. 다행히도, 단 하나의 VLA 어레이에 대해 걱정할 필요가 있습니다. – Anycorn

    0
    • 검토 어셈블리 출력
    • 응용 프로그램, 그것은 프로필
    • 는 메모리 사용