c - 如果按顺序声明可分割变量,它们的地址是否递增

标签 c memory-management keil c51

我们有一个包含很多文件的 c 程序,我们想知道一件事。

我们正在用 C51 编译它。

如果,假设在其中一个文件中,我声明了一些变量,例如:

unsigned char xdata a;
unsigned char xdata b;
...
//etc
unsigned char xdata z;

他们的地址会以相同的顺序递增吗?正如他们宣布的那样?

我意识到递增地址可以使用数组或结构来实现,或者我可以分配选择的固定地址,但这不是问题所在。

最佳答案

Will their addresses be incrementing and in the same order? as they are declared?

不,您不能知道或假设任何关于此的事情。它们可以在堆栈上或寄存器中以任何顺序分配,或者根本不分配。只有在声明数组和结构时才能保证分配顺序。

此外,您不能对数组以外的任何对象使用指针运算,否则您可能会遇到各种微妙的未定义行为错误。

关于c - 如果按顺序声明可分割变量,它们的地址是否递增,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58410541/

相关文章:

php - 在大型 C 项目上编写代码时进行测试

c# - 如何找出类、对象、变量等消耗的内存

c - 比较float变量和无符号整数时出现意外结果

c - STM32 RTC 默认中断不起作用,CubeMX 配置

c - 除了 -Wall 和 -Wextra 之外,还有哪些其他工具可以用来发现尽可能多的错误或警告?

c - 老鼠迷宫谜题的解数

c - 如何在C代码中获取变量的类型?

windows - Visual Studio 2010——如何减少其内存占用

c++ - 在 C++ 中定义多个组合对象的最佳方式?

c - STM32F4 不压入/弹出浮点寄存器