Click here to Skip to main content
Click here to Skip to main content
Technical Blog

Tagged as

Pointer pointing to Stack or Heap ??

, 8 Apr 2009 CPOL
Rate this:
Please Sign up or sign in to vote.
Today on Code project some one posted a question like "Is there any way to find whether a pointer points to stack or heap". Is there actually an API for the same??Well windows dosen't provide an API or a straight forward way to acomplish this. Any how we can find a pointer points to stack or heap by

Today on Code project some one posted a question like "Is there any way to find whether a pointer points to stack or heap". Is there actually an API for the same??

Well windows dosen't provide an API or a straight forward way to acomplish this. Any how we can find a pointer points to stack or heap by simple computations and ofcourse with the help of TIB( Thread Infomation Block - If you want to learn more about TIB, have a look to the Under The Hood article of Matt Pietrek ). In the Thread information block, there are two members, the "StackTop"( located at FS[4] ) and "StackBase" ( located at FS[8] ). The "StackTop" is the memory from which the stack started, and the "StackBase" is the stack location the program commits upto that point. So any object created on stack will have an address between this two pointers. So if we get a pointer just check whether the pointer falls between the above two memory locations. if it does, then it can be consider a pointer to some stack object. So here is my API to find whether the pointer points to stack or heap.

// This function will return true if the pointer points to stack. Other wise false


<div></div>




bool IsMemoryOnStack( LPVOID pVoid )
{
    LPVOID dwStackTop = 0;
    LPVOID dwStackLowCurrent = 0;
    __asm
    {
        mov EAX, FS:[4]
        mov dwStackTop, eax
            mov EAX, FS:[8]
            mov dwStackLowCurrent, eax
    }
    if( pVoid <= dwStackTop && pVoid >= dwStackLowCurrent )
    {

        // The memory lie between the stack top and stack commited.
        return true;
    }

    // Pointer dosen't point to the stack
    return false;
}

Sample code that uses the above API..

void main()
{
    int OnStack;
    bool bOnStack = IsMemoryOnStack( &OnStack );// Returns true
    int *pOnHeap = new int;
    bOnStack = IsMemoryOnStack( pOnHeap );// Returns false
}

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

Share

About the Author

Naveen
Software Developer (Senior)
Singapore Singapore
No Biography provided

Comments and Discussions

 
QuestionHow to know if the memory is on the heap ? Pinmemberfvalerin4-Mar-13 12:20 
GeneralNice post, but an observation PinmvpRajesh R Subramanian20-Nov-09 18:58 
GeneralGood and useful article PinmemberARJ 0910-Sep-09 19:00 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Mobile
Web02 | 2.8.141015.1 | Last Updated 8 Apr 2009
Article Copyright 2009 by Naveen
Everything else Copyright © CodeProject, 1999-2014
Terms of Service
Layout: fixed | fluid