gpt4 book ai didi

c - 嵌入式系统中的内存冲突

转载 作者:行者123 更新时间:2023-11-30 16:08:38 24 4
gpt4 key购买 nike

我正在使用适用于 PowerPC 的 Diab 编译器构建应用程序。我遇到内存冲突问题。

header1.h中我已经声明了

...
void NullFunct_1 (int);
...

然后在 main.c 中定义函数 NullFunct_1

    #include "header1.h"
...
void NullFunct_1 (int f)
{
return;
}

header2.h中我已经声明了

    struct tp_key 
{
int a;
void (*fn_ptr)(int); // function pointer
unsigned int b;
unsigned int c;
int d;
int e;
};

header2.c中,我按如下方式初始化数组Key

struct tp_key Key[48] = {0, &NullFunct_1, 0, 0, 0, 0};

header3.h中,我声明了全局变量Units

extern int Units;

header3.c中,我定义并初始化变量Units

int Units = 0; //Units variable can then assume the values of 0, 1000 or 10000 only.

程序已编译并链接,生成可执行文件时没有错误。

生成的链接编辑器内存映射如下

    input           virtual                        
section address size file
...
.data 50036adc 00000484 header2.o
Key 50036adc 00000480
Xxxx 50036f5c 00000004

.data 50036f60 00000170 header3.o
Units 50036f60 00000004
...
...
NullFunct_1 500038b8 0000000c main.o
...

您可能会注意到变量KeyUnits是内存“邻居”0x50036adc + 0x480 = 0x50036f5c

在某些情况下,变量 Units 包含值 1342191800 (十六进制为 0x500038B8),该值对应于变量 的内存地址Null_Fu​​nct_1

这是由于指令而发生的

struct tp_key Key[48] = {0, &NullFunct_1, 0, 0, 0, 0};

这是链接器问题,没有正确计算变量Key的内存大小吗?或者我犯了一个错误?即使存在链接器问题,您能否建议如何避免此类问题?

最佳答案

这里没有“冲突”。

sizeof(struct tp_key) [24] * 48 的十六进制为 0x480。所以一切都是 100% 好的。

我的建议:不要专注于追寻“编译器错误”。假设编译器已经过测试并被数百万程序员使用。

关于c - 嵌入式系统中的内存冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59290662/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com