when we use C + + to do the underlying driver, often encounter memory shortage warning, the reason is often because of memory overflow, leakage or cross-border reasons. So what's the connection between them?
memory overflow (out of Memories)
means that the program does not have enough memory space for it to use when it requests memory.
memory leak (leak)
This means that the program cannot free up the requested memory space and consumes useful memory after it has applied for memory.
Note: Memory leaks can eventually cause memory overflow
Simply understood, a memory overflow is a requirement for allocating more memory than is given by the system. A memory leak is a point that the system requests to allocate memory for use (new), but does not return (delete) when it is exhausted, resulting in a valid memory consumption.
Memory leaks can be divided into 4 categories:
1. Frequent memory leaks
Code that causes a memory leak is executed many times, causing a memory leak every time the execution occurs
2. Accidental memory leaks
Memory leaks are caused by executing code that causes a memory leak in certain environments
From the above two memory leaks, the importance of the test environment and test methods in the program life cycle is essential.
3. Disposable memory leaks
The code executes only once, but there is always a piece of memory leaking, more common in the construction class, the destructor does not free memory.
4. Implicit leakage
The program continues to allocate memory during the run, until the end of the release of memory, but the general server program will run for a long time, not released in a timely manner can lead to memory exhaustion and memory leaks.
To sum up, a one-time memory leak on the user's program maintenance is no real harm, but in real life, we still try to avoid such events occur.
memory out of boundsis pointing to the system to request a piece of memory, when used is beyond the scope of application. For example, some functions of operating memory: sprintf, strcpy, strcat, vsprintf, memcpy, Memset, Memmove. When the code that caused the memory leak runs, the error is unavoidable and often causes1. Corrupt memory allocation information data in heap2. Corrupted the memory space of other objects in the program3. Corrupted free memory blocksattached: If your program has run all right before, but because you add a few classes of member variables or modify some of the code (if you make sure that these changes are completely correct) and cause the program error, because of whether the memory is destroyed, focus on troubleshooting memory is out of bounds. buffer Overflow (stack overflow)in order to temporarily access the data needs, the general allocation of some memory space is called a buffer. If you write data to a buffer that cannot fit into the buffer, the opportunity causes the storage unit outside the buffer to be overwritten, called a buffer overflow. and the stack overflow is a buffer overflow, the principle is the same. Divided into upper overflow and down overflow. Among them, the overflow refers to the full and add new data to it, resulting in data overflow, the next overflow refers to the empty stack and delete operations, resulting in a space overflow.
Copyright NOTICE: This article for Bo Master original article, without Bo Master permission not reproduced.
Differences and connections between memory overflow, memory leak, memory overrun and stack overflow in C + + memory mechanism