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/