sbrk

    2熱度

    1回答

    引用從Kernighan和Ritchie代碼(第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回答

    我試過BRK系統調用函數中添加此: void *addr = sbrk(0); printk("current-add-is-%p-\n", addr); 但它的內核編譯時返回的錯誤SBRK功能的隱式聲明。而我無法找到sbrk的定義! 我需要測量的是,無論何時某個用戶進程試圖擴展其程序中斷地址,我都會知道它當前的程序中斷地址,以便我可以測量有多少內存進程正在請求。 謝謝。

    2熱度

    2回答

    我知道program break是Linux操作系統爲進程分配的最高虛擬內存地址,因此標記爲堆的最高地址。您可以撥打sbrk(0)以獲得程序暫停地址。 當我創建了以下重要的程序,我得到每次運行時不同的結果: #define _BSD_SOURCE #include <stdio.h> #include <unistd.h> int main() { printf("system

    0熱度

    1回答

    我得到了下面的代碼和平segmentation fault (core dumped)段錯誤(我執行malloc(),free()和realloc()): void free(void* ptr) { void* curr = head; void* before = NULL; int isLegal = 0; /*Line X*/printf("cur

    0熱度

    1回答

    我想在gdb中調試一個低級別的C程序。這個程序的目的是作爲一個包裝,啓動另一個進程,並監控/干擾其內存使用。 當我在gdb中加載程序時,一切似乎都正常(如果不是理想的話)。我看到新的流程叉,然後它掛起。就其本身而言,這不會太奇怪;可能是我的代碼中的某個地方存在死鎖或無限循環。 但是,如果我中斷並殺死gdb內的進程,然後再次在同一個gdb會話中運行它,一切正常工作正常。大約需要半秒鐘的時間才能運行,

    1熱度

    2回答

    我讀過sbrk是一個不推薦的調用,其中一個更喜歡mmap和MAP_ANONYMOUS標誌。我需要一個可以增長的連續(邏輯)內存塊。但是,mmap將第一個參數作爲提示對待,因此可能會產生差距,這在我的情況下是不可接受的。我嘗試使用MAP_FIXED標誌(它不建議使用文檔狀態),並且我可以獲得連續內存,但在映射多個頁面後,我的程序出現了奇怪的行爲:系統函數printf和clock_gettime開始失

    4熱度

    2回答

    我試過在我的機器上使用sbrk(1),然後故意寫出綁定來測試頁面大小,這是4096字節。但是當我調用malloc(1)時,在訪問135152個字節後,我得到了SEGV,這是多頁面大小的方式。我知道malloc是庫函數,它依賴於實現,但考慮到它最終會調用sbrk,它爲什麼會給出多個頁面大小。任何人都可以告訴我關於它的內部工作? 我的操作系統是Ubuntu的14.04和我的建築是86 更新:現在我想知

    9熱度

    3回答

    的C代碼: // program break mechanism // TLPI exercise 7-1 #include <stdio.h> #include <stdlib.h> void program_break_test() { printf("%10p\n", sbrk(0)); char *bl = malloc(1024 * 1024);

    -1熱度

    1回答

    我給分配代碼是 dat* data = NULL; data = sbrk(SIZE); if((int) data != -1){ return data }else{ printf("Not enough space"); } 的SBRK(...)函數返回一個有效的ADRESS(0x603021),但是當我進入gdb和打印sbrk(0)我得到十六進制值0xfff

    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; /* stack buffer starts at this address