2015-01-13 9 views
1

에 정렬되지 :동적 할당 된 메모리가 여기에 정상적으로 작동 코드의 SSE

char a[100]; 
for (int i = 0; i < 100; i++) 
    a[i] = 0; 
__m128i x = _mm_load_si128((__m128i *) a); 

는하지만 동적으로 메모리를 할당 할 경우, VS 2013가 중단됩니다 : 나는 모두 동적 메모리를 사용할 수있는 방법

char *a = new char[100]; 
for (int i = 0; i < 100; i++) 
    a[i] = 0; 
__m128i x = _mm_load_si128((__m128i *) a); 

및 정렬 된로드 명령어?

+0

나는 완전히 그 질문에 대해 오해했다고 생각합니다. 오류 메시지가 있습니까? 아니면 실제로 원하는대로 정렬되지 않았습니까? – Codor

+0

정렬 된로드 명령어를 사용하면 두 번째 인터럽트가 발생합니다. – KUN

+0

코드를 확인했는데 콘솔 응용 프로그램에서 제대로 작동합니다. 오류 없음. – LPs

답변

2

sizeof의 Beacuse는 char 포인터의 크기를 반환합니다 : 4 바이트.

+0

아, 코드를 수정했습니다. – KUN

0

new 연산자를 사용하여 정렬 된 메모리 (유지 관리와 관련하여 가장 좋은 아이디어가 아닐 수 있음)를 반환하거나 더 많은 메모리를 할당하고 그 중 일부만 연산 할 수 있습니다. 예를 들어, 8 바이트 짝수 주소에 정렬이 필요한 경우 다음과 같이 8 바이트를 더 할당하고 정렬 된 포인터에서 작업하십시오.

char* a; 
uintptr_t unaligned = (uintptr_t)a; 
uintptr_t aligned = (unaligned % 8) ? unaligned : (unaligned % 8) + 8; 
char* a_aligned = (char*)aligned; 

유형 uintptr_tstdint.h 정의된다.