[英]C, get the memory segment given the pointer
是否有可能獲得給定指針/次地址值的內存段。
GDB中已經有可用的解決方案了嗎? 如果不是定制的gcc(非便攜式)功能實現也應該很好。
例如:
int data = 100;
int main(void) {
int ldata = 100;
int *hdata = malloc(10 * sizeof(int));
}
getMemSeg(&data) should return "DATA"
getMemSeg(&ldata) should return "STACK"
getMemSeg(hdata) should return "HEAP"
您可以閱讀/proc/self/maps
來查看進程的內存布局的詳細信息。 AC庫中有一個符號,指示堆的開始。 在glibc中,它稱為_end
。 而且,堆棧中的所有內容始終都低於當前堆棧幀中的所有內容(至少在x86和其他處理器中堆棧向下增長的位置)。 因此,至少對於一個簡單的程序,這些啟發式將起作用:
extern int _end;
const char* getMemSeg(void* p){
int stackframe;
if(p>(void*)&stackframe)
return "STACK";
if(p<(void*)&_end)
return "DATA";
return "HEAP";
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.