gpt4 book ai didi

c - 微 Controller 内存分配

转载 作者:太空宇宙 更新时间:2023-11-04 07:29:43 27 4
gpt4 key购买 nike

今天我一直在思考以下问题:

在一台普通的 pc 中,当你分配一些内存时,你向操作系统请求它,它会跟踪哪些内存段被占用,哪些内存段没有被占用,并且不要让你弄乱其他程序的内存等。但是微 Controller 呢,我的意思是微 Controller 没有运行的操作系统,所以当你要求一堆内存时发生了什么?您不能简单地访问内存芯片并访问随机位置,因为它可能已被占用...谁会跟踪内存的哪些部分已被占用,并为您提供一个空闲位置来存储某些东西?

编辑:

我用 C 编写了微 Controller ...我认为答案可能是“与语言无关”。但让我更清楚一点:假设我让这个程序在微 Controller 上运行:

int i=0;
int d=3;

是什么确保我的 i 和 d 变量没有存储在内存中的同一位置?

最佳答案

我认为评论已经涵盖了这一点......

请求内存意味着您有一些操作系统管理您正在分配的内存(使用术语操作系统的松散意义)。首先,作为一般规则,您不应该在微 Controller 中分配内存(我可能会因为该声明而被激怒)。可以在某些情况下完成,但您可以控制自己的内存,您拥有系统和您的应用程序,要求内存意味着要求您自己。

除非你有理由不能静态分配你的结构或数组,或者如果存在互斥的代码路径可能都需要大量或全部空闲内存,则不能使用 union ,你可以尝试动态分配和释放,但它是一个更难解决的系统工程问题。

内存的运行时分配和编译时是有区别的。你的例子与问题的其余部分无关

int i=0;int d=3;

编译器在编译时在 .data 中为每个项目分配两个位置。链接器和/或脚本管理 .data 所在的位置及其大小限制,如果 .data 大于可用的,您应该收到链接器警告,否则您需要修复链接器命令或脚本以匹配您的系统。

运行时分配是在运行时管理的,它管理内存的位置和方式由该库决定,即使您有足够的内存,错误或编写不当的库也可能与 .text、.data、.bss 和/或堆叠并导致很多问题。

堆栈的过度使用也是一个相当严重的系统工程问题,来自非嵌入式系统的问题如今经常被忽视,因为有太多的内存。在微 Controller 上处理嵌入式代码时,这是一个非常现实的问题。您需要知道最坏情况下的堆栈使用情况,如果您要动态分配堆,或者即使静态分配,也至少要为那么多的内存留出空间。

关于c - 微 Controller 内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14964985/

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