http://egloos.zum.com/sweeper/v/2815395


일단 이 이미지와 설명을 같이 보면


thread는 heap, stack, data 영역을 공유하고 thread만의 stack 영역을 확보함.


이 stack 영역을 확보 한다는 게 어떤 의미인지 알아야하는데


이 stack 영역을 확보 한다는 의미는 thread로 실행하는 함수의 지역변수를 다루기 위한 stack 영역이라고 보임


즉, main thread에 속한 int x= 777; 에서의 x를 thread 가 자신의 stack 메모리에 복사하지 않는다는 것임.

따라서 파라미터로 전달되는 x는 main thread의 지역 변수 x가 그대로 전달됨. 이거를 *를 쓰면 주소가 전달돼서 778이 되는거고

값으로 전달하면 값의 복사에 의하여 777이 되는거고


반대로 thread가 참고하는 함수의 지역변수 y는 주소값이 다 다름 

결과 값은 아래에 있음.


아무래도 stack 메모리를 확보하는 점에서 main thread에 있는 지역변수의 값을 복사하여 가져온다고 생각을 한 것 같은데

그게 아닌듯함.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <iostream>
#include <cstdio>
#include <thread>
#include <vector>
#include <random>
#include <mutex>
 
#define SIZE 10
 
#include <thread>
#include <iostream>
 
using namespace std;
 
void foo(int* x)
{
    int y;
    y = 10;
    (*x)++;
    printf("x : %x y: %x  ", x, &y);
}
int main() {
    int x = 777;
    int y = 1;
    int k = 0;
    printf("x : %x y: %x  "&x,&y);
    //auto f = [&] { ++x; };
    std::thread t1(foo, &x);
    std::thread t2(foo, &x);
    t1.join();
    t2.join();
    printf("x : %x y: %x  "&x, &y);
 
    return 0;
}
cs






이게 내가 생각하는 스레드 생성 이후의 메모리 구조임.

그러면 p의 값이 갖고 p가 가리키는 값도 같은게 맞지 않을까