오류, 버그, 질문 - 페이지 2503 1...249624972498249925002501250225032504250525062507250825092510...3184 새 코멘트 [삭제] 2019.07.08 11:53 #25021 Alexey Viktorov : 글쎄, 버그는 무엇입니까? 각각 2바이트씩 2개의 요소로 구성된 배열을 선언하면 당연히 4바이트를 얻게 됩니다. 버그는 어디에 있습니까? 무엇에서? 하지만 이것은 4-정렬되고 2개의 요소는 2*8 바이트를 차지합니다. 죄송합니다만, 이렇게 쓰시면 주제를 이해하지 못하는 것입니다. 십자가의 아날로그: #include <iostream> struct alignas( 4 ) A { short j; }; int main() { A q[ 2 ]; std::cout << sizeof (q) << std::endl; // 8 return 0 ; } 아마도 실수는 여기에 있지 않습니까? TheXpert 2019.07.08 12:27 #25022 Vict : 죄송합니다만, 이렇게 쓰시면 주제를 이해하지 못하는 것입니다. 아니, 이해하지 못하는 것 같다. //g++ 5.4.0 #include <iostream> #pragma pack (push, 4 ) struct A { short j; }; #pragma pack (pop) int main() { A q[ 2 ]; std::cout << sizeof (q) << std::endl; // 4 return 0 ; } [삭제] 2019.07.08 13:48 #25023 TheXpert : 아니, 이해하지 못하는 것 같다. small soft의 #pragma pack은 매우 특이한 것입니다. 당연하게도 현재 표준이 된 alignas는 다르게 작동합니다. 여기 또 하나: #include <iostream> struct A { short j; } __attribute__((aligned( 4 ))); int main() { A q[ 2 ]; std::cout << sizeof (q) << std::endl; // 8 return 0 ; } TheXpert 2019.07.08 14:29 #25024 Vict : 작고 부드러운 것들의 #pragma 팩은 매우 특이한 것입니다(솔직히 말해서, 그 작동 원리는 지금 저를 놀라게 했습니다). 당연하게도 현재 표준이 된 alignas는 다르게 작동합니다. 네 이미 좋아요) #include <iostream> struct A { short j; } alignas( 4 ) ; int main() { A q[ 2 ]; std::cout << sizeof (q) << std::endl; // 4 return 0 ; } #pragma pack은 gcc에서도 잘 작동하지만 당신이 작성한 것은 단지 정렬된 것과 다르게 작동하는 내부 gcc 속성일 뿐입니다. [삭제] 2019.07.08 14:58 #25025 TheXpert : 네 이미 좋아요) #pragma pack은 gcc에서도 훌륭하게 작동하지만 당신이 작성한 것은 단지 정렬된 것과 다르게 작동하는 내부 gcc 속성일 뿐입니다. 그렇다면 이 예는 무엇을 보여줍니까? alignas를 사용하여 이해하지 못한 것은 무엇입니까? 컴파일러조차도 코드에 맹세합니다. 1 .cc: 7 : 3 : warning: attribute ignored in declaration of ' struct A' [-Wattributes] 7 | } alignas( 4 ) ; | ^~~~~~~ 1 .cc: 7 : 3 : note: attribute for ' struct A' must follow the ' struct ' keyword #pragma 팩은 gcc가 호환성을 위해서만 지원하는 소프트 팩의 이상한 해킹입니다. TheXpert 2019.07.08 15:00 #25026 Vict : 그렇다면 이 예는 무엇을 보여줍니까? alignas를 사용하여 이해하지 못한 것은 무엇입니까? 동의하다, 붙어있다 여기에 올바른 코드가 있습니다 #include <iostream> struct alignas( 4 ) A { short j; } ; int main() { A q[ 2 ]; std::cout << sizeof (q) << std::endl; // 8 return 0 ; } alignas는 패키징과 유사하지 않음을 의미합니다. 왜냐하면 동일한 gcc에서 (작은 소프트가 없도록) 기본 패킹 비율은 8이기 때문입니다. 왜냐하면: #include <iostream> struct A { short j; }; struct B { short j; long long k; }; int main() { A q[ 2 ]; B r[ 2 ]; std::cout << sizeof (q) << " " << sizeof (r) << std::endl; // 4 32 return 0 ; } 그리고 여기에 alignas(8) #include <iostream> struct alignas( 8 ) A { short j; }; struct alignas( 8 ) B { short j; long long k; }; int main() { A q[ 2 ]; B r[ 2 ]; std::cout << sizeof (q) << " " << sizeof (r) << std::endl; // 16 32 return 0 ; } TheXpert 2019.07.08 15:12 #25027 그리고 이 기본 동작에 유의하십시오. 작은 소프트와의 호환성을 위한 것이 아닙니다. [삭제] 2019.07.08 15:26 #25028 TheXpert : 그리고 이 기본 동작에 유의하십시오. 작은 소프트와의 호환성을 위한 것이 아닙니다. 아이디어에 빠지지 않았습니다. 예제에서는 모든 것이 정상이며 아무런 문제가 없습니다. 기본값 - 구조체 정렬 == 멤버 중에서 가장 엄격한 정렬 요구 사항을 사용합니다. 구조체 {char;} == 1, 구조체 {char; short} == 2, 구조체 {char; int} == 4 등. 어디에서나 동일합니다. 그리고 long long == 8이므로 alignas는 효과가 없습니다. TheXpert 2019.07.08 15:45 #25029 Vict : 아이디어에 빠지지 않았습니다. 예제에서는 모든 것이 정상이며 아무런 문제가 없습니다. 예, 맞습니다. 예는 지표가 아닙니다. 결과적으로 mql pack은 alignas가 아닌 #pragma pack처럼 작동합니다. Francuz 2019.07.08 16:22 #25030 여러분, 정보를 공유하세요. 무엇을 위해 얼라인먼트를 사용하고 있습니까? 1...249624972498249925002501250225032504250525062507250825092510...3184 새 코멘트 트레이딩 기회를 놓치고 있어요: 무료 트레이딩 앱 복사용 8,000 이상의 시그널 금융 시장 개척을 위한 경제 뉴스 등록 로그인 공백없는 라틴 문자 비밀번호가 이 이메일로 전송될 것입니다 오류 발생됨 Google으로 로그인 웹사이트 정책 및 이용약관에 동의합니다. 계정이 없으시면, 가입하십시오 MQL5.com 웹사이트에 로그인을 하기 위해 쿠키를 허용하십시오. 브라우저에서 필요한 설정을 활성화하시지 않으면, 로그인할 수 없습니다. 사용자명/비밀번호를 잊으셨습니까? Google으로 로그인
글쎄, 버그는 무엇입니까?
각각 2바이트씩 2개의 요소로 구성된 배열을 선언하면 당연히 4바이트를 얻게 됩니다. 버그는 어디에 있습니까? 무엇에서?
하지만 이것은
4-정렬되고 2개의 요소는 2*8 바이트를 차지합니다.
죄송합니다만, 이렇게 쓰시면 주제를 이해하지 못하는 것입니다.
십자가의 아날로그:
아마도 실수는 여기에 있지 않습니까?
죄송합니다만, 이렇게 쓰시면 주제를 이해하지 못하는 것입니다.
아니, 이해하지 못하는 것 같다.
아니, 이해하지 못하는 것 같다.
small soft의 #pragma pack은 매우 특이한 것입니다. 당연하게도 현재 표준이 된 alignas는 다르게 작동합니다.
여기 또 하나:
작고 부드러운 것들의 #pragma 팩은 매우 특이한 것입니다(솔직히 말해서, 그 작동 원리는 지금 저를 놀라게 했습니다). 당연하게도 현재 표준이 된 alignas는 다르게 작동합니다.
네 이미 좋아요)
#pragma pack은 gcc에서도 잘 작동하지만 당신이 작성한 것은 단지 정렬된 것과 다르게 작동하는 내부 gcc 속성일 뿐입니다.
네 이미 좋아요)
#pragma pack은 gcc에서도 훌륭하게 작동하지만 당신이 작성한 것은 단지 정렬된 것과 다르게 작동하는 내부 gcc 속성일 뿐입니다.
그렇다면 이 예는 무엇을 보여줍니까? alignas를 사용하여 이해하지 못한 것은 무엇입니까? 컴파일러조차도 코드에 맹세합니다.
#pragma 팩은 gcc가 호환성을 위해서만 지원하는 소프트 팩의 이상한 해킹입니다.
그렇다면 이 예는 무엇을 보여줍니까? alignas를 사용하여 이해하지 못한 것은 무엇입니까?
동의하다, 붙어있다
여기에 올바른 코드가 있습니다
alignas는 패키징과 유사하지 않음을 의미합니다.
왜냐하면 동일한 gcc에서 (작은 소프트가 없도록) 기본 패킹 비율은 8이기 때문입니다.
왜냐하면:
그리고 여기에 alignas(8)
그리고 이 기본 동작에 유의하십시오. 작은 소프트와의 호환성을 위한 것이 아닙니다.
아이디어에 빠지지 않았습니다. 예제에서는 모든 것이 정상이며 아무런 문제가 없습니다. 기본값 - 구조체 정렬 == 멤버 중에서 가장 엄격한 정렬 요구 사항을 사용합니다.
구조체 {char;} == 1, 구조체 {char; short} == 2, 구조체 {char; int} == 4 등. 어디에서나 동일합니다. 그리고 long long == 8이므로 alignas는 효과가 없습니다.
아이디어에 빠지지 않았습니다. 예제에서는 모든 것이 정상이며 아무런 문제가 없습니다.
예, 맞습니다. 예는 지표가 아닙니다.
결과적으로 mql pack은 alignas가 아닌 #pragma pack처럼 작동합니다.