Collection Of C++ concepts and Terminology.
Multithreading on multi-core is an amazing programming paradigm to help speed up applications and utilize the compute resources to the maximum. C++ 11 provides an amazing suite of tools to implement multi-threading including
std::thread wraps the underlying platform dependent
pthread execution to build platform agnostic applications,
std::future help navigate the pain of having thread-pools and manually handling lifetimes for multiple threads.
std::async helps execute a funciton asynchronously, potentially on a new thread, without explicitly making new threads. The output of the function can be stored in
std::future that can be used as and when available. The available launch policies 1.
std::launch::deffered and 3.
std::launch::async | std::launch::deferred help define how the operation is to be performed. A new thread is created for the first, not for the second and OS made decision for the third for the policies.
Stack vs Heap
Stack is the memory space in the computer which stores variables temporarily. Runtime variables are created, stored and manipulated in the stack. When the process ends or the code goes out of scope, the mempry is automatically erased, i.e. managed by the CPU. Usually functions, local variables and reference variables are declared here.
Heap is the memory space used to store global variables accessible throughout the scope of the program and supports dynamic memory allocation for larger objects. It is not managed by the CPU and is often called free floating memory. The programmer putting data on the heap is responsible to clear it up and could otherwise cause memory leaks. In C++, creating objects using the
new keyword allocates memory on the heap and thus needs the
delete call to clean it up.
Stack vs Heap
- Stack is a linear data structure with occupying contihguous memory locations while heaps nd
- Stack allows high speed access while heaps are slower to access. It is because the memory modification on the stack is usually a push or a pop instruction and done on one machine cycle compared the heap which needs to call the OS code for the modification.
- Stack is managed by the OS and CPU, thus never gets fragmented while the heap is not managed and thus get fragmented because blocks of memory are first allocated then freed
- Stack is meant for local variables only while the heap allows variable access globally
- Stack is limited in size based on the OS while the heap is not limited in size
- Stack doesn’t allow the variables to be resized while the heap allows it using calls like
realloc()in C language.
- The finite memory on the stack is allocated everytime a new thread is created while the heap is more of a runtime need-based memory.