如何将整个c ++命名空间放置在特定的内存位置?

问题描述

如何为嵌入式设置将c ++名称空间放置在特定的内存位置?我尝试使用 属性(((section(“ sectionName”)))),但编译器将忽略它。

解决方法

您可以使用链接程序脚本将不同的程序节映射到不同的内存区域等。这会给您带来一定的灵活性,但是请注意,不能保证命名空间是单个节

让您知道静态变量与全局变量放置在不同的部分,自动变量(在堆栈上)放置在同一部分,等等...

更新

变量在一个文件中还是在多个文件中都没有关系,因为符号的放置发生在另一阶段。

常量是一个全局变量(我假设您是在谈论全局变量),由于它是常量,因此它将进入.rodata(只读数据)。

考虑以下示例:

➜  ~ cat main.cpp
#include <iostream>
#include <cstring>

const int varGlobal = 0;
static int varStatic;
int varNonconst = 1;

int main(int argc,char **argv) {

然后窥视二进制文件:

➜  ~ objdump -t main | rg var
0000000000002008 l     O .rodata        0000000000000004              _ZL9varGlobal
0000000000004138 l     O .bss   0000000000000004              _ZL9varStatic
00000000000012bb l     F .text  0000000000000019              _GLOBAL__sub_I_varNonconst
0000000000004010 g     O .data  0000000000000004              varNonconst

从那里您可以看到每个人的结局。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...