64 비트 커널을 만들 때 (x86_64 플랫폼 용) 컴파일러에서 사용자 공간 ABI가 수행하는 128 바이트 Red Zone을 사용하지 않도록하는 것이 좋습니다 . GCC의 경우 컴파일러 플래그는 -mno-red-zone입니다. 커널을 사용할 수 있으면 인터럽트 방지가되지 않습니다. 하지만 그 이유는 무엇입니까?
내 목표는 내 새 라이브러리에 abi 호환성을 제공하는 것입니다. 원시 포인터 대신 unique_ptr을 사용하려고합니다. 하지만 표준 라이브러리를 업데이트하면 abi가 중단 될 수 있습니다. 사실입니까? 향후 stdlib 릴리즈에서 unique_ptrs에 대한 abi 안정성 보장이 있습니까?
나는 나 자신을 가르치고/어셈블리에 대해 읽었습니다. 어셈블리에 관한 대부분의 책은 x86을 가리 킵니다. 코드의 모든 레지스터 이름은 "r"이 아닌 "e"로 시작합니다 (x86-64 에서처럼). 그러나 64 비트 Linux를 사용하며 x86-64를 언급하지 않기 때문에이 책에 어떤 가치가 있는지 궁금합니다. 잠깐 말하자면,이 리소스를 사용하여 x86-64
FreeBSD에서 소스로 CVC4을 컴파일하려고하는데 구성 시간에 딸꾹질을하고 있습니다 - 공유 객체가 공통 경로에 명확하게 있음에도 불구하고 GMP를 찾을 수 없습니다. : $> ls /usr/local/lib | grep gmp
libgmp.a
libgmp.la
libgmp.so
libgmp.so.10
libgmp.so.10.1.3
libgm
내가 메모리에 임시 변수를 저장하여 3을 반환하려고 간단한 조립 프로그램이 있습니다 $ as out.s -o out.o
$ ld -s -o out out.o
$ ./out
segmentation fault
내 생각 : 그러나 .text
.global _start
_start:
movl $2, %ebx
mov %ebx
이것은 답을 찾을 수없는 이상한 문제입니다. 이 : #include <iostream>
using namespace std;
void show_number(int number) {
cout << number << endl; // Shows '10' as expected
}
int main() {
cout << endl; // R
나는 1/238 바이트 정수가 eax에 의해 반환되고, 8 바이트 정수가 eax:edx에 의해 반환된다는 것을 알고 있습니다. 그런데 는 4/8/16 바이트 부동 소수점 방법 을 (어쩌면 내가 long double가 16 바이트 수 있습니다 기억 ..) 은 cdecl 규칙/stdcall을 반환? @MatteoItalia에 덕분에, 나는 VC++의 long