Chociaż nie ma oficjalnie obsługiwanego sposobu, aby to zrobić. Czy istnieje sposób (w nowoczesnych systemach), aby wykryć, czy wskaźnik jest ze stosu (na przykład stos rozmówcy).Jak wykryć, czy pamięć jest ze stosu? (nie sterty lub zmienna statyczna)
Nawet jeśli to nie będzie działać jako część rzeczywistego logiki kodu, to może pomóc uniknąć błędów w konfiguracji, które mogą wykryć, np
void my_function(void *arg) {
/* Only some configurations can do this (depending on compiler & arch). */
#if THE_MOONS_ALIGN
assert(not_stack_memory(arg));
#endif
/* ... actual logic ... */
}
Jeśli znasz początkowy wskaźnik stosu i znasz rozmiar stosu, możesz łatwo obliczyć, czy bieżąca zmienna znajduje się w zasięgu. Prostym przykładem byłoby zrobienie 'int main (void) {int firstVar; char * ptrToFirstVar = (char *) i firstVar;/* Teraz masz krótki początek stosu */char * endOfStack = ptrToFirstVar - yourSTACKSIZE; 'Następnie sprawdź, czy zmienna znajduje się pomiędzy początkiem stosu a rozmiarem stosu. – tilz0R
@ tilz0R lub większość platform udostępnia interfejsy API do wysyłania zapytań o te informacje. –
@AjayBrahmakshatriya skupić się na * na większości * części komentarza. – tilz0R