Bar*_*man 1 c memory macros multithreading pointers
让我们假设以下代码:
char* c = __FILE__;
c 是否存在于堆栈或堆中?(作为后续 - 我可以将 c 传递给另一个线程进行处理,还是需要在其他地方存储数据?)。
谢谢你。
c是一个指针类型的变量,并且存在于任何地方(无论存储持续时间如何),它基于您的声明所在的范围进行声明。它使用字符串文字的地址进行初始化,该字符串文字具有静态存储持续时间,不可修改,并且可以使用相同的字符串折叠。
如果您将其更改为__PRETTY_FUNCTION__,则与您询问的其他人不同,因为它不是预处理器可以扩展的宏。预处理器从根本上不知道函数边界(如果函数实际上是由预处理器扩展的宏分段定义的怎么办?)漂亮的函数名。