我想知道ARM Cortex-M4内部是否有缓存。
我在技术参考手册中没有找到任何线索,但这是官方的还是隐藏的?我知道有些微控制器有缓存,但它位于总线和 RAM 之间,而不是内核内部。
你知道有什么文件可以澄清这一点吗?
老男人在这里说
-n --nmagic 关闭节的页面对齐,并将输出标记为“NMAGIC”(如果可能)。-N --omagic 将文本和数据部分设置为可读可写。另外,不要对数据段进行页面对齐,并禁用对共享库的链接。如果输出格式支持 Unix 风格幻数,请将输出标记为“OMAGIC”。注意:虽然 PE-COFF 目标允许有可写文本部分,但它不符合 Microsoft 发布的格式规范。--no-omagic 该选项取消了 -N 选项的大部分效果。它将文本段设置为只读,并强制数据段页对齐。注意 - 此选项不启用对共享库的链接。为此,请使用 -Bdynamic。
我确实明白这些选项用于使代码(.text)部分可写或不可写,但我不明白对齐或不对齐这些部分的意义,以及什么是“NMAGIC”部分
代码:
#include <stdio.h>
typedef struct{
int i;
int tab[];
}mystr;
mystr a = {1,{0,1,2}};
int main(void){
printf("%d%d%d\n",a.i,a.tab[0],a.tab[1]);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
C编译:
$ gcc main.c -o main && ./main
101
Run Code Online (Sandbox Code Playgroud)
C++编译:
$ g++ main.c -o main && ./main
main.c:8:27: error: too many initializers for ‘int [0]’
const mystr a = {1,{0,1,2}};
^
Run Code Online (Sandbox Code Playgroud)
我明白这个问题,就是tab没有分配任何内存.但为什么这对C来说没问题呢?为什么C++不会自动为内存空间分配tab?我知道结构类似于C++中的对象,但可能有一些我不了解全局对象实例化的细微之处?