内存分配c语言int,c语言中的内存分配

“栈”这个数据结构本身并没有规定其生长的方向,具体实现中向高地址或者低地址生长都无妨。但是对于操作系统而言,栈的生长方向一般是取决于处理器对PUSH/POP操作的实现。对于x86来说,PUSH以后SP/ESP的值是减小,因此它是向低地址生长的,样例代码:#include

void stack_growth(char *function_parameter) {

char local;

if (&local > function_parameter)

printf("up\n");

else

printf("down\n");

printf("%p %p\n", &local, function_parameter);

}

int main()

{

char c = 'c';

stack_growth(&c);

return 0;

}

而声明一个变量,无非是告诉编译器,在栈上给它准备一块空间。因此你所提及的情况,实际上与栈无直接关系:a先声明的话,就一定会先在栈上为它分配空间吗?举个最简单的栗子,如果a根本没被用到,编译器完全可以不为它分配空间。所以这个最终还是取决于编译器的实现。

补充一段WIKI吧:Some processors families, such as the x86, have special instructions for manipulating the stack of the currently executing thread. Other processor families, including PowerPC and MIPS, do not have explicit stack support, but instead rely on convention and delegate stack management to the operating system's Application Binary Interface (ABI).

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值