堆栈(内存段)是否总是连续保存变量?

时间:2014-01-27 08:14:28

标签: c memory-management

假设我正在编写一个C程序:

int a = 1;
int b = 5;
int *p = &a;

威尔:

int k = *(p+1);

总是给k = 5


形式上:

这个变量'地址的“连续”属性是否依赖于堆栈实现?如果没有,是否有任何保证(例如&a < &b < &p)?

(这个在ubuntu上使用gcc的简单测试给出k=5,但涉及不同类型的其他测试不起作用)

1 个答案:

答案 0 :(得分:6)

否...... 虽然它可能会出现在大多数平台上绝对不能保证你的代码会产生5.你所拥有的是未定义的行为,这可能导致你的程序。永远不要依赖未定义的行为,完全停止。