c - STM32中const char和char指针在内存中是如何表示的

标签 c pointers stm32

MCU怎么知道a变量指向的字符串是在数据内存还是在程序内存?
当我将 const char * 转换为 char * 时(例如调用 strlen 函数时),编译器会做什么?
char * 可以用作 char *const char * 而没有任何性能损失吗?

最佳答案

STM32 使用平坦的 32 位地址空间,因此 RAM 和程序存储器(闪存)位于同一逻辑空间。

Cortex 核心当然知道哪种类型的内存在哪里,可能是通过由访问地址触发的硬件地址解码器。不过,这当然超出了 C 所关心的范围。

删除 const 不是运行时操作,因此应该没有性能开销。当然,删除 const不好的,因为在某些地方你冒着有人真的相信 const 指针意味着数据不会被写入的风险,并且违背 promise 会使坏事发生。

关于c - STM32中const char和char指针在内存中是如何表示的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42507309/

相关文章:

c - 从中断返回后的轻微延迟

c++ - STM32 板的 RAM、堆和堆栈内存

c - 如何检查我是否可以使用 <sys/statvfs.h>?

c - c中的链表遍历

c - 在基于 C 的语言中,EOF 是如何生成和解释的?

c - 尝试更改短程序以使用指针

c++ - 类 "classname"没有成员 "function"

c - 多个相同的 I2C 传感器与 vl53L0x API (ST Microelectronics)

C fputc 错误处理?

c - 在 C 中取证删除硬盘上的文件