c - 内存中的值如何与变量及其类型相关联?

标签 c pointers memory static

<分区>

昨天我突然疑惑了。我已经用 C 编程很长时间了。我的问题是:

假设有一个变量

static uint32_t count = 0;

这个变量应该存储在数据段中。为了这个例子,我们假设数据段从进程的 4GB 虚拟内存空间中的偏移量 0x08000000 开始。

我知道在偏移量 0x08000000 之后的某处,有 4 个字节保留给值为 0 的变量“count”。

我的问题是内存中的这个 4 字节值如何与名称“count”和类型“uint32_t”相关联(例如,它是 4 字节长而不是 6 字节长。)

从下面的答案来看,映射信息似乎存储在“符号表”

这似乎表明它必须是内存中最终可执行文件的一部分。如果是这样,符号表存储在哪里?它在代码/文本段中吗?

最佳答案

就生成的机器代码而言,名称“count”不存在。它只知道加载和存储数据的地址。类似地,类型信息不会被保留,因为生成的用于操作此变量的机器代码是根据正确的大小和符号性生成的,因此它执行 4 字节的加载和存储,以及无符号的 32 位算术数据。

出于调试和动态链接的目的,该信息可能在其他地方可用。带符号的二进制文件将有一个表,其中列出了全局变量所在的地址或偏移量,以及它们的类型。

关于c - 内存中的值如何与变量及其类型相关联?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14757660/

相关文章:

c++ - 为什么衰减到数组参数的指针似乎不适用于 sizeof()?

c - 如何使用指向结构体的指针调用函数?

C - 什么时候使用指针运算,什么时候使用数组索引?

c++ - 为什么指向整数的指针递增 4 个字节?

Java分配: allocating objects from a pre-existing/allocated pool

linux - smem如何计算RSS、USS和PSS?

c++ - 在 C++ 中检查结构是否良好对齐或包含间隙

c - 用C将3D数据写入HDF5文件

c - 在 C 中打印 char 数组的意外行为

c - 如果我只想接收 C/TCP 中的数据,是否需要 connect()?