之前只在C语言下,利用pthread搞过一些小demo玩。看实验室并行框架源码时发觉,全是C++风格的多线程,涉及到的pthread_create()为何不能以成员函数作为参数、锁成员变量、线程安全的类各种的问题,这些之前完全没有接触过。特此进行了两天的调研和思考,现在就简单整理一下这两天看过的资料。
由于就真的是光看没练,只是单纯翻了一堆大致原理,可能会有不少纰漏。阅读后觉得有不妥的地方,那很可能就真的是不妥的,笑。
1. C++类成员函数在内存中的摆法
之前转载了一篇文章,文中大致介绍C++类成员函数在内存中是怎么摆的。其实摆法和C语言就没什么区别,函数还是放在代码段,数据则是放在数据段+bss段+栈+堆中。
类成员函数,背后的原理大致上就相当于在函数调用中,自动多加了一个相关结构指针的参数,然后就可以访问到相关结构的成员变量。
多个对象及其成员函数的内存分布:
大致原理示例代码(当然,实际区别在于调用约定上):
#include <iostream>
using namespace std;
struct testStruct
{
int i;
char c;
};
void testFunc(testStruct* myThis)
{
cout << "i: " << myThis->i << " c: " << myThis->c