有关栈的小知识

  1. 查看自己系统中栈在虚拟地址空间的大致位置:
#include<stdio.h>
int main()
{
    int i;
    printf("The stack top is near %p\n", &i);
    return 0;
}

引用于《c专家编程》
在我的ubuntu14.04 64位操作系统中输出
The stack top is near 0x7ffc5643981c
符合64位虚拟内存管理
2. linux栈的大小
首先用ulimit -s可以查看栈大小
输出:8192。单位是K。也就是8M

  1 #include <stdio.h>
  2 int main()
  3 {
  4     int size = 2000000, i;
  5     int buf[size];
  6     for(i = 0; i < size; ++i)
  7         buf[i] = i;
  8     return 0;
  9 }

当size为2百万,int占4个字节,总共大小为8百万。程序没问题
当size为210万,程序输出Segmentation fault(core dumped)
3. 查看可以分配多大的内存

#include<stdio.h>
#include<stdlib.h>
int main()
{
    int MB = 0;
    while(malloc(1 << 20)) ++MB;
    printf("Allocated %d MB totaln", MB);
    return 0;
}

引用于《C专家编程》
在32位的windows10上最大分配了1904MB。大约2G。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值