logo
down
shadow

static variable vs stack variable: thread safety vs stack size?


static variable vs stack variable: thread safety vs stack size?

By : Dee Dubs
Date : November 21 2020, 01:01 AM
With these it helps It's not just a matter of initialization. A static variable, even one defined within a function, is a single instance that's shared by all calls to that function — even calls in different threads. If you use a static variable as a scratch buffer, all your threads will be sharing the same scratch buffer, and you'll need to use explicit synchronization to keep them from interfering with each other. You'll also need to figure out how to make the threads share the buffer effectively; if they're all trying to use the same parts at the same time and frequently have to wait for mutex locks, you lose the benefit of concurrency and might as well just use a single thread.
It'd be much easier to have the function just allocate its scratch area on the heap and delete it before returning. (You can use std::unique_ptr in C++11 to ensure that the buffer is deleted when the pointer goes out of scope, or std::auto_ptr if you're stuck with C++98.)
code :


Share : facebook icon twitter icon
POSIX Thread Stack Memory - Can we have varying stack sizes and the safety issues?

POSIX Thread Stack Memory - Can we have varying stack sizes and the safety issues?


By : vanilsonvl
Date : March 29 2020, 07:55 AM
it helps some times A) Yes, of course, that's the purpose of pthread_attr_setstacksize.
B) Yes, calling pthread_detach or pthread_join causes the thread resources to be reclaimed upon termination.
Does execution stack and thread's stack and local variable list refer to different stacks?

Does execution stack and thread's stack and local variable list refer to different stacks?


By : Chuck
Date : March 29 2020, 07:55 AM
This might help you Lasse's answer is quite good; I just want to emphasize a few of his points.
First, C# is translated into an equivalent IL program, and then the IL program is translated into an equivalent machine code program. The IL language has the concept of an evaluation stack; this is purely a concept in the IL language. All that is required is that the jitter translate that IL into machine code that has the same final result. There is no requirement whatsoever that the jitter actually use the "real" stack just because the IL program was written to use an "evaluation stack".
Thread Stack Size Not Matching Native Memory Tracking Thread Stack Size

Thread Stack Size Not Matching Native Memory Tracking Thread Stack Size


By : Aadish Chaubal
Date : March 29 2020, 07:55 AM
Assembly of variable-size stack frame: these stack-alignment instructions seem useless in allocating a VLA?

Assembly of variable-size stack frame: these stack-alignment instructions seem useless in allocating a VLA?


By : user3546835
Date : March 29 2020, 07:55 AM
I think the issue was by ths following , I thought that a useful exploratory program would be to reduce your generated code to:
code :
.globl _vframe
_vframe:
    pushq    %rbp
    movq     %rsp, %rbp  
    subq     $16, %rsp
    leaq     22(, %rdi, 8), %rax      
    andq     $-16, %rax       
    subq     %rax, %rsp
    leaq     7(%rsp), %rax
    shrq     $3, %rax
    leaq     0(, %rax, 8), %r8
    mov %r8, %rax
    sub %rsp, %rax
    leave
    ret
extern void *vframe(unsigned long n);


#include <stdio.h>

int main(void) {
    int i;
    for (i = 0; i < (1<<18); i++) {
        void *p = vframe(i);
        if (p) {
            printf("%d %p\n", i, p);
        }
    }
    return 0;
}
assembly for variable-size stack frame(about stack for local variable)

assembly for variable-size stack frame(about stack for local variable)


By : Greg
Date : March 29 2020, 07:55 AM
With these it helps The compiler internally keeps track of the offsets of each local variable, including p. It doesn't need to store the addresses of the local variables on the stack. In this case, it knows that p is at (%rsp).
This code doesn't use any call-preserved registers other than rbp, so that is the only one it saves.
Related Posts Related Posts :
  • What is the purpose of name mangling in C++?
  • C++ Why the void function is not working eventhough I called it?
  • How the pointer and the pointer's adress can share the same memory adress?
  • error C2220: warning treated as error - no 'object' file generated
  • exception of strcpy function in c++ console program
  • How to access USB barcode scanner data directly from USB port using C/C++ without driver
  • Under which circumstances will std::vector.clear() call a destructor?
  • Template partial specialisation and dependent names
  • best way to share data between c codes
  • C++ ignores if statement conditions
  • How to set the argv[ ] to be case-insensitive in a Win32 Console Application?
  • How to fix error "clang: error: linker (via gcc) command failed with exit code 1 (use -v to see invocation)"?
  • C++ How do I print a .txt file verbatim?
  • Creating two dimensional array of class
  • How do I correctly use COMMTIMEOUTS with OVERLAPPED IO mode reading from a Serial port
  • An assert macro which expands to static_assert when possible?
  • How to write a copyconstructor for a class which has HANDLE as a member in win32 c++ application?
  • C++ saving info such as tree in a file
  • Transforming an expression template tree
  • How to overload an operator with multiple parameters like a + b + c?
  • C++ 11 with Raspberry Pi performances
  • Make a C++ class look like a numpy array using swig
  • Postfix incrementer overloading for nested enumerated types
  • Is there a tidy way of associating metadata with functions in C++
  • QObject::installEventFilter(): Cannot filter events for objects in a different thread
  • LNK2005 error with Zxing C++
  • C++ Doubly Linked List with Pointers: Object of class isn't constructed properly
  • Using a random string generator in c++ constructor
  • What should I use instead of void as one of the alternative types in an variant?
  • C++ return value from multithreads using reference
  • How to connect multiple TCP IP clients to same server port using c++
  • Defaul compiler generates the reference operator (In C++)?
  • Unable to change directory time stamp after using FILE_FLAG_BACKUP_SEMANTICS
  • vector handling displaying output
  • WSAGetLastError returns WSAENOTSOCK - Cause?
  • C++: How to overload pow for user type?
  • C++ using arrays as multidimensional despite initalising it as 1D with pointer
  • How negate std::is_integral for use in tag dispatch?
  • Retrieve serial number from USB memory (Windows environment c++)
  • g++ error: invalid preprocessing directive #INCLUDE
  • C++ What is the std::for_each() function parameter type?
  • C++: Read individual lines from text file, sort words alphabetically
  • Saving 'this' address into a variable
  • c++ command line arguments in ubuntu terminal
  • Convert "Cartesian coordinates" to "polar coordinates with respect to user specified origin"
  • In what order are local scoped objects destructed?
  • How to use SDL_MapRGB with SDL 2.0
  • how compiler and interpreter work in case of array declaration
  • GSL integration behaves strange
  • Cropping an image with OpenCV and C
  • Find the last line in text file and select the first 10 char and print to a new file?
  • Created many CCSprits but when triggering ccTouchBegan gives the last one allways
  • seekp and seekg don't work with fstream
  • Taking input in Sublime Text 3
  • ld: -bind_at_load and -bitcode_bundle (Xcode setting ENABLE_BITCODE=YES) cannot be used together
  • C++ storing #define as std::string would give size as zero compile time
  • How to use static linking with OpenSSL in C/C++
  • What is the difference between a trap, an error, a failure and program abortion?
  • Dynamic members allocation in qt
  • How to reduce object file size when compiling for VxWorks 5.5.1?
  • shadow
    Privacy Policy - Terms - Contact Us © ourworld-yourmove.org