如何解决如何将整个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
从那里您可以看到每个人的结局。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。