오류, 버그, 질문 - 페이지 2498

 
Andrei Trukhanovich :

이 경우 IMHO는 안됩니다.

여기서 크기가 4의 배수가 아니어야 하는 이유는 무엇입니까?

클래스가 정렬될 수 있음이 밝혀졌습니다.

 
fxsaber :

여기서 크기가 4의 배수가 아니어야 하는 이유는 무엇입니까?

클래스가 정렬될 수 있음이 밝혀졌습니다.

내부 정렬이기 때문입니다. 다음 외부 변수는 구조의 크기에 관계없이 정렬 8에 할당될 가능성이 높습니다.

 
Andrei Trukhanovich :

내부 정렬이기 때문에

그러면 얼라인먼트의 의미가 사라질까봐

 struct A pack( 4 )
{
   short j;
};

void OnStart ()
{
   Print ( sizeof (A)); // 2
  
   const int handle = FileOpen ( __FILE__ , FILE_WRITE | FILE_BIN );
  
   if (handle != INVALID_HANDLE )
  {
    A a = { 0 };
    
     FileWriteStruct (handle, a);
     Print ( FileTell (handle)); // 2
    
     FileClose (handle);
  }
}
 
fxsaber :

그러면 얼라인먼트의 의미가 사라질까봐

정렬의 의미는 내부 변수의 주소가 정렬의 배수라는 것입니다.

 
Andrei Trukhanovich :

정렬의 의미는 내부 변수의 주소가 정렬의 배수라는 것입니다.

귀하의 진술과 문서 를 비교하려고 시도했지만 이해하지 못했습니다.

[삭제]  
Andrei Trukhanovich :

미완성 아이템인 듯. 결국 이것은 분명히 오류입니다.

 struct A pack( 4 )
{
   short j;
};

void OnStart ()
{
   A q[ 2 ];
   Print ( sizeof (q)); // 4
   return ;
}
 
fxsaber :

귀하의 진술과 문서 를 비교하려고 시도했지만 이해하지 못했습니다.

내 의견으로는 도움말이 업데이트되지 않은 것 같습니다. C# 지원이 등장한 빌드(겨울에?)에 정렬이 작동하는 방식에 대한 설명이 있었던 것 같습니다.

여기 정렬에 대한 habré googled에 대한 기사가 있습니다. 제 생각에는 MT5 https://habr.com/en/post/142662/ 에서도 작동합니다.

 
Igor Makanu :

내 의견으로는 도움말이 업데이트되지 않은 것 같습니다. C# 지원이 등장한 빌드(겨울에?)에 정렬이 작동하는 방식에 대한 설명이 있었던 것 같습니다.

여기 정렬에 대한 habré googled에 대한 기사가 있습니다. 제 생각에는 MT5 https://habr.com/en/post/142662/ 에서도 작동합니다.

기사와 댓글을 썼습니다. 정렬 알고리즘이 전혀 명확하지 않습니다. Pack(4)는 그만한 가치가 있지만 어떤 이유로 인해 2, 4로 정렬됩니다.

[삭제]  
fxsaber :

기사와 댓글을 썼습니다. 정렬 알고리즘이 전혀 명확하지 않습니다. Pack(4)는 그만한 가치가 있지만 어떤 이유로 인해 2, 4로 정렬됩니다.

귀찮게 왜? 단일 정렬은 이전과 같이 기본값이며(변경될 가능성이 낮음) 팩 지정자는 곡선입니다. 정말 필요한 경우 추가 기능을 직접 삽입할 수 있습니다.

 
Vict :

귀찮게 왜? 단일 정렬은 이전과 같이 기본값이며(변경될 가능성이 낮음) 팩 지정자는 곡선입니다. 정말 필요한 경우 추가 기능을 직접 삽입할 수 있습니다.

그것을 알아내고 싶다.