주제가 How is an array aligned in C++ compared to a type contained?에이어서 실험을했습니다.포함 된 유형에 비해 C++에서 배열이 어떻게 정렬됩니까? 2
#include<iostream>
using namespace std;
int main()
{
const int N = 12;
{
float p1[N], p2[N];
cout << p1 << " " << p2 << " " << p2 - p1 << endl;
}
{
float* p1, *p2;
// allocate memory
p1 = new float[N];
p2 = new float[N];
cout << p1 << " " << p2 << " " << p2 - p1 << endl;
delete[] p1;
delete[] p2;
}
}
내가 그 P1과 P2는 4 바이트 정렬는 sizeof (플로트) == 것 기대 인용 된 질문 위키에 따르면 여기
는 코드입니다. 그러나 그 결과는 : N = 9, 11, 12 위치 (P2-P1)에 대한 배열 사이0x7fff4fd2b410 0x7fff4fd2b440 12
0x7f8cc9c03bd0 0x7f8cc9c03c00 12
동일 (12) 거리 = 그래서이 플로트 어레이 모양 8. 정렬 16 바이트이고, n은 8이고 . 왜?
P. 내 프로세서는 인텔 코어 i7입니다
컴파일러 - g ++ 4.6.3
그것은 구조로 배열 퍼팅 하나가 10 수레 거리를 얻을 수 있다는 것을 나타납니다 operator new
에 의해 할당
const int N = 10;
struct PP{
float p1[N], p2[N];
};
int main() {
PP pp;
cout << pp.p1 << " " << pp.p2 << " " << pp.p2 - pp.p1 << endl;
}
0x7fff50139440 0x7fff50139468 10
알 수 있습니다. 구조체에 결합하면 10 플로트 거리가됩니다. const int N = 10; 구조체 PP { float p1 [N], p2 [N]; }; int main() { PP pp; cout << pp.p1 << ""<< pp.p2 << ""<< pp.p2 - pp.p1 << endl; } 출력 : 0x7fff50139440 0x7fff50139468 10 – klm123