어셈블리에서 메모리를 동적으로 할당하려면 표준 C 라이브러리와 연결되지 않는 프로그램을 사용하고 싶습니다. Mac OS X (10.6.2)에서는 에서 brk (2) 및 sbrk (2)를 사용할 수 없으므로 대체 방법은 무엇입니까? (나는 그것이 마하 호출을 포함 추측하지만, 에 그 주위에 약간의 문서가 될 것 같다거야)
그래서 다음 코드를 사용하여 malloc을 사용하지 않고 힙에 메모리를 추가하려고합니다 (크기는 함수에서 부호없는 int 매개 변수이며 설정된 숫자가 아닙니다) void * temp = sbrk(sizeof(void*)+sizeof(unsigned int)+size);
지금 내가 뭘하려고 할 때 그러나 NULL로 온도에서 무효 *의 값을 설정할 *(vo
_sbrk에 문제가 있습니다. 컴파일의 링크 단계에서 나는 아래의 명령을 사용하여 내 객체를 연결하고 _sbrk에 대한 정의되지 않은 참조를 얻습니다. 내가 ARM926EJ-S과 ARM 모드에서 컴파일하고 arm-none-eabi-ld -static -T linkerscript.ld -o exe timer_example.o /home/ziga/project
sbrk를 사용하여 비교적 기본적인 메모리 할당자를 작성했습니다. 나는 메모리 덩어리를 요구하고, 65k라고 말하고 동적 메모리를 요구하는 변수에 대해 필요에 따라 그것을 조각 낸다. 65k 블록에 메모리를 다시 추가하여 메모리를 확보합니다. 65k 블록은 sizeof (16 바이트) 유니온에서 파생됩니다. 그런 다음 블록을 16 바이트 경계까지 정렬합니다
따라서 성능 및 성능면에서 어셈블리에 간단한 서버를 작성합니다. 내가 아는 유일한 방법은 시스템 호출이다. (int 0x80을 통해) 분명히 어셈블 할 때 또는로드 할 때 할당 된 것보다 많은 메모리를 필요로 할 것이므로 읽어 보았고 주로 mmap()을 이해할 수 없기 때문에 sbrk()를 사용하기로 결정했습니다. 아무튼 Linux는 sbrk()에 대한 인