sbrk

    1

    1답변

    나는 어떻게 sbrk가 작동하는지 이해하려고 노력하고있다. int main() { printf("end of the break : %p\n", sbrk(0)); printf("end of the break : %p\n", sbrk(10)); printf("new end of the break : %p\n\n", sbrk(0));

    0

    1답변

    할당을 위해 malloc 및 free에 대한 고유 함수를 작성 중입니다. C sbrk() 래퍼 기능을 활용해야합니다. 내가 이해 한대로 sbrk()은 프로그램의 데이터 공간을 인수로 전달 된 바이트 수만큼 증가시키고 프로그램 중단 위치를 가리 킵니다. 나는 다음과 같은 코드가있는 경우 는 : #define BLOCK_SIZE 20 int x; x = (in

    2

    1답변

    커니 핸과 리치에서이 코드를 참조 (제 2 판 188 페이지)는 static Header* morecore(unsigned nu) { char *cp, *sbrk(int); Header* up; if (nu < NALLOC) nu = NALLOC; cp = sbrk(nu * sizeof(Header));

    0

    1답변

    gdb에서 저수준 C 프로그램을 디버깅하려고합니다. 문제의 프로그램은 다른 프로세스를 시작하고 메모리 사용을 모니터링/간섭하는 래퍼로 작동하도록되어 있습니다. gdb에서 프로그램을로드 할 때, 처음에는 모든 것이 정상적이지 않은 것처럼 보입니다. 나는 새로운 프로세스 포크를보고 나서 멈춘다. 그리고 그 자체로, 이것은 너무 이상하지 않을 것입니다; 내 코드

    3

    1답변

    STM32F7 용 임베디드 소프트웨어를 작성 중이며 libc는 newlib-2.4.0.20160527입니다. 다음과 같이 내가 _sbrk()을 구현 한 : 나는 다음 작업을 수행 할 때 다음 extern intptr_t g_bss_end; /* value after the last byte in .bss */ extern intptr_t g_msp_lim

    0

    1답변

    저는 초보자이며, 원하는 방식으로 sbrk에 메모리를 할당하는 데 어려움을 겪고 있습니다. 궁극적으로는 먼저 한 열을 할당 한 다음 각 행을 거쳐 한 번에 한 행을 할당하여 2D 배열을 만들고 싶습니다. 그러나 두 번째로 sbrk를 사용하면 사용하지 않은 메모리 위치에서 시작하지만 이미 할당 한 메모리 주소를 덮어 쓰지 않는 것으로 나타났습니다. 그래서 제

    0

    1답변

    yagarto GCC 컴파일러를 사용하는 STM32F0 응용 프로그램이 있습니다. _sbrk newlib_stubs.c를 구현했습니다. 내가 겪고있는 문제는 malloc (256)을 _sbrk를 호출하고 4K의 메모리를 요청하면서 in-turn malloc이라고 부르는 것이다. 내 시스템에는 총 8K만이 있으므로 분명히 이것이 문제입니다. _sbrk에 대한

    5

    2답변

    manual page은 나에게 너무 많이 말했고 그것을 통해 "glibc"의 메모리 관리에 대한 많은 배경 지식을 알게되었습니다. 하지만 여전히 혼란 스럽습니다. "malloc_trim (0)"(매개 변수로 0 참고) 의미 (1.) "힙"섹션의 모든 메모리가 OS로 반환됩니까? 또는 (2.) 힙의 최상위 영역에있는 "사용되지 않은"모든 메모리가 OS로 반환

    1

    2답변

    나는 sbrk가 더 이상 사용되지 않는 호출이고 mmap을 MAP_ANONYMOUS 플래그로 선호한다고 읽었습니다. 성장할 수있는 하나의 연속 (논리) 메모리 블록이 필요합니다. 그러나 mmap은 첫 번째 매개 변수를 힌트로 처리하므로 갭을 만들 수 있으므로 내 경우에는 받아 들일 수 없습니다. MAP_FIXED 플래그 (문서 상태가 권장되지 않음)를 사용

    0

    1답변

    내로는 sbrk를 spliting, 내가 않는 sbrk(stack) : 나는 내가 크기 size이 할당 된 영역의 일부를 가지고 그것을 반환 할 다음 필요한 것보다 항상 더 malloc에 ​​ void *malloc(size_t size) { stack = 0; while (stack < size) stack += 4096;