«calling-convention» 태그된 질문

8
__stdcall은 무엇입니까?
Win32 프로그래밍에 대해 배우고 있으며 WinMain프로토 타입은 다음과 같습니다. int WINAPI WinMain ( HINSTANCE instance, HINSTANCE prev_instance, PSTR cmd_line, int cmd_show ) 이 WINAPI식별자가 무엇인지 발견하고 혼란 스러웠습니다 . #define WINAPI __stdcall 이것은 무엇을 하는가? 나는 이것이 리턴 타입 후에 무언가를 갖는 것에 혼란스러워합니다. 무엇입니까 __stdcall? 반환 유형과 함수 이름 …

4
Windows64가 x86-64의 다른 모든 OS와 다른 호출 규칙을 사용하는 이유는 무엇입니까?
AMD에는 x86-64에서 사용할 호출 규칙을 설명하는 ABI 사양이 있습니다. 자체 x86-64 호출 규칙이있는 Windows를 제외하고 모든 OS가이를 따릅니다. 왜? 이 차이에 대한 기술적, 역사적 또는 정치적 이유를 아는 사람이 있습니까? 아니면 순전히 NIHsyndrome의 문제입니까? 나는 OS마다 더 높은 수준의 요구 사항이 다를 수 있음을 이해하지만, 예를 들어 Windows에서 레지스터 매개 …

7
콜 스택은 정확히 어떻게 작동합니까?
프로그래밍 언어의 저수준 작업이 어떻게 작동하는지, 특히 OS / CPU와 상호 작용하는 방법에 대해 더 깊이 이해하려고합니다. 나는 아마도 스택 오버플로의 모든 스택 / 힙 관련 스레드에서 모든 답변을 읽었으며 모두 훌륭합니다. 하지만 아직 완전히 이해하지 못한 것이 하나 있습니다. 유효한 Rust 코드 인 의사 코드에서이 함수를 고려하십시오 ;-) fn …

4
T *를 레지스터로 전달할 수 있지만 unique_ptr <T>는 왜 할 수 없습니까?
CppCon 2019에서 Chandler Carruth의 연설을보고 있습니다. 무 비용 추상화가 없습니다 거기에, 그는 그가 당신이 사용하여 발생할 얼마나 많은 오버 헤드 놀랐다 방법의 예를 제공 std::unique_ptr&lt;int&gt;오버를 int*; 해당 세그먼트는 17:25 시점에 시작됩니다. 그의 예제 코드 쌍 (godbolt.org) 의 컴파일 결과 를 볼 수 있습니다 . 실제로 컴파일러가 unique_ptr 값을 기꺼이 전달하지 …

3
Windows에서 __cdecl 또는 __stdcall?
현재 DLL로 배포 될 Windows 용 C ++ 라이브러리를 개발 중입니다. 내 목표는 바이너리 상호 운용성을 극대화하는 것입니다. 보다 정확하게는 DLL을 다시 컴파일 할 필요없이 여러 버전의 MSVC ++ 및 MinGW로 컴파일 된 코드에서 DLL의 함수를 사용할 수 있어야합니다. 그러나 어떤 호출 규칙이 가장 좋은지 cdecl또는 stdcall. 때때로 "C 호출 …

1
스택 메모리를 사용하지 않을 때 왜 할당됩니까?
다음 예제를 고려하십시오. struct vector { int size() const; bool empty() const; }; bool vector::empty() const { return size() == 0; } 생성 된 어셈블리 코드 vector::empty(최적화와 함께 clang) : push rax call vector::size() const test eax, eax sete al pop rcx ret 왜 스택 공간을 할당합니까? 전혀 사용되지 않습니다. …
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.