deep think


Why is this designed for CPP

Type

为什么指针类型建议使用uintptr_t而不是usigned long

  • uintptr_t: 在 C99 标准中引入,用于表示指针大小,具有跨平台性,而usigned long 不确定,比如在 Windows 64位机器上为32个字节,而非64个字节

Keyword

为什么const可以限制对于变量的修改?

  • const: 核心机制是编译器保证,而非运行时强制

为什么 static 可以限制全局变量在源文件中的可见性?

  • 默认的全局变量和函数具有外部链接(External Linkage),其他文件可以通过 extern 声明访问它们
  • 用 static 修饰全局变量时,该变量会被赋予 内部链接(Internal Linkage) 属性,使其仅在当前编译单元(即当前源文件)中可见
  • 可以使用匿名命名空间(Anonymous Namespace)将全局变量指定为内部链接行为
$ cat ext/ext.cc
int var1 = 1;
static int var2 = 2;

namespace {
    int var3 = 3;
}

$ nm -C ext.o 
0000000000000000 D var1
0000000000000004 d var2
0000000000000008 d (anonymous namespace)::var3

Memory

  • .bss: 存放未初始化(包括初始化为0)的全局变量和静态变量,仅在程序加载时由系统分配内存并初始化为零
  • .data: 存放已初始化(不包括初始化为0)的全局变量和静态变量,初始值会被直接写入可执行文件中,在程序加载时从磁盘加载到内存中

Published by


Leave a Reply

Your email address will not be published. Required fields are marked *