Table of Contents

C语言数据存储类型

链接性、作用域和生命周期


特殊情况

全局变量

当需要链接外部文件的变量的时候:关于如何正确使用extern

  1. 不带 extern 的变量声明有且必须只能有1份,这个变量的「实际存储位置」也就是在「其所在的文件」中
  2. 带 extern 的是从外部导入变量,可以有任意多个,extern的「导入声明」是可以放在头文件里面的
  3. 一种优雅(我喜欢)的写法是:
    1. 头文件用宏控制
    2. 有XXX_DATA的宏:int xxx;
    3. 没有XXX_DATA的宏:extern int xxx;
    4. 这样变量声明全都在头文件里面完成了,CPP中不用声明变量,又都可以使用这个变量
    5. 注意还是要为这个变量分配空间:在某一个CPP文件中,定义XXX_DATA再include这个头文件(这个顺序很重要)
    6. 我有很多项目都用了这个技巧,可以翻旧代码看看:

全局静态变量

局部变量

局部静态变量

可见性

其他:大规模的静态/全局数据

// 尚未测试

// 默认 x86_64 模型只能处理低于 2 GB 的静态/全局数据。你可以通过以下命令
// 告诉 GCC 用 medium memory model,支持更大的全局或静态数据区域
-Xcompiler -mcmodel=medium
// 因为这里用的是nvcc,所以使用了-Xcompiler将参数传递给原C编译器