Gcc 链接器如何在内存段中放置符号

Gcc 链接器如何在内存段中放置符号,gcc,memory,linker,llvm,memory-layout,Gcc,Memory,Linker,Llvm,Memory Layout,我试图弄清楚链接器是如何生成内存布局的。我有关于内存部分及其属性的基本知识。我的问题是链接器如何将符号放置在特定节中 比如,;类C数组元素保证连续放置在数据部分 +---------+ | A[0] | 0x0000 <- An arbitrary memory address +---------+ | A[1] | 0x0004 +---------+ | A[2] | 0x0008 +---------+ | | | ... | |

我试图弄清楚链接器是如何生成内存布局的。我有关于内存部分及其属性的基本知识。我的问题是链接器如何将符号放置在特定节中

比如,;类C数组元素保证连续放置在
数据
部分

+---------+
|   A[0]  | 0x0000 <- An arbitrary memory address
+---------+
|   A[1]  | 0x0004
+---------+
|   A[2]  | 0x0008
+---------+
|         |
|   ...   |
|         |
+---------+
对于这种情况是否有任何规则或惯例,例如:;相同的模块变量连续放置,或者编译器生成的符号名按字母顺序放置

+-----------+
|   a(foo)  | \ 
+-----------+  -> Same module variables placed consecutively
|   b(foo)  | /
+-----------+
|   a(bar)  | \
+-----------+  -> Same module variables placed consecutively
|   b(bar)  | /
+-----------+
|           |
|    ...    |
|           |
+-----------+


+-----------+
|   a(foo)  | \ 
+-----------+  -> Variables placed alphabetically
|   a(bar)  | /
+-----------+
|   b(foo)  | \
+-----------+  -> Variables placed alphabetically
|   b(bar)  | /
+-----------+
|           |
|    ...    |
|           |
+-----------+
我已经检查了GCC和LLVM文档,但是找不到关于这个主题的任何信息。是否有任何地方可以让我查找有关地址分配或内存布局优化的更详细信息

+-----------+
|   a(foo)  | \ 
+-----------+  -> Same module variables placed consecutively
|   b(foo)  | /
+-----------+
|   a(bar)  | \
+-----------+  -> Same module variables placed consecutively
|   b(bar)  | /
+-----------+
|           |
|    ...    |
|           |
+-----------+


+-----------+
|   a(foo)  | \ 
+-----------+  -> Variables placed alphabetically
|   a(bar)  | /
+-----------+
|   b(foo)  | \
+-----------+  -> Variables placed alphabetically
|   b(bar)  | /
+-----------+
|           |
|    ...    |
|           |
+-----------+