Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 6135037
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 23, 20262026-05-23T17:25:51+00:00 2026-05-23T17:25:51+00:00

I understand that when something is throw n, the stack is ‘unwound’ to the

  • 0

I understand that when something is thrown, the stack is ‘unwound’ to the point where it is caught, and the destructors of class instances on the stack in each function context are run (which is why you should not throw an exception from a destructor – you could end up throwing a second one)…but I wonder where in memory the object that I have thrown is stored while this happens?

Is it implementation dependent? If so, is there a particular method used by most popular compilers?

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-23T17:25:51+00:00Added an answer on May 23, 2026 at 5:25 pm

    Yes, the answer is compiler-dependent.

    A quick experiment with my compiler (g++ 4.4.3) reveals that its runtime library first tries to malloc memory for the exception and, failing that, attempts to allocate space within a process-wide “emergency buffer” that lives on the data segment. If that doesn’t work out, it calls std::terminate().

    It would appear that the main purpose of the emergency buffer is to be able to throw std::bad_alloc after the process has run out of heap space (in which case the malloc call would fail).

    The relevant function is __cxa_allocate_exception:

    extern "C" void *
    __cxxabiv1::__cxa_allocate_exception(std::size_t thrown_size) throw()
    {
      void *ret;
    
      thrown_size += sizeof (__cxa_refcounted_exception);
      ret = malloc (thrown_size);
    
      if (! ret)
        {
          __gnu_cxx::__scoped_lock sentry(emergency_mutex);
    
          bitmask_type used = emergency_used;
          unsigned int which = 0;
    
          if (thrown_size > EMERGENCY_OBJ_SIZE)
            goto failed;
          while (used & 1)
            {
              used >>= 1;
              if (++which >= EMERGENCY_OBJ_COUNT)
                goto failed;
            }
    
          emergency_used |= (bitmask_type)1 << which;
          ret = &emergency_buffer[which][0];
    
        failed:;
    
          if (!ret)
            std::terminate ();
        }
    
      // We have an uncaught exception as soon as we allocate memory.  This
      // yields uncaught_exception() true during the copy-constructor that
      // initializes the exception object.  See Issue 475.
      __cxa_eh_globals *globals = __cxa_get_globals ();
      globals->uncaughtExceptions += 1;
    
      memset (ret, 0, sizeof (__cxa_refcounted_exception));
    
      return (void *)((char *)ret + sizeof (__cxa_refcounted_exception));
    }
    

    I don’t know how typical this scheme is.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I understand that you do something like: $('form').append('<input type=text name=color-1 value=Hello />'); But I
I encountered something that I can't understand. I have this code: cout << f1
I'm guessing there's something really basic about C# inheritance that I don't understand. Would
I know that it's not safe to throw exceptions from destructors, but is it
I understand that some countries have laws regarding website accessibility. In general, what are
I understand that there are several ways to blend XNA and WPF within the
I understand that they are both supposed to be small, but what are the
I understand that Microsoft uses this template when versioning their products: Major.Minor.Build.Revision. Major is
I understand that server-side validation is an absolute must to prevent malicious users (or
I understand that IronPython is an implementation of Python on the .NET platform just

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.