代码区、文字常量区、全局静态区、栈区、堆区的内存空间分布

这篇博客探讨了不同内存区域如代码区、文字常量区、全局静态区、栈区和堆区的地址分配规律。作者通过编写和测试程序发现,代码区、文字常量区和全局静态区从低到高分配地址,而栈区则从高到低分配。堆区的地址分配不固定,且文字常量区总在程序代码区之后,全局静态区在文字常量区之后。在某些环境下,栈区可能位于堆区之前或之后。
摘要由CSDN通过智能技术生成

学习结构体之后,就想着来看看栈上多个变量的地址的分配情况,是不是也有某种规则一个接一个挨着。不想发现连续的两个变量的地址并不连续,可以说分得很开,而且从高地址到低地址分配。
虽然并不知道系统(还是编译器? 谁告诉我下)为什么这么做,但索性写了个程序也看看其它区域是怎么分配地址的。
小代码如下,如果有错误,请留言,我会从心底里感谢你的。

#include <stdio.h>
#include <string.h>
#include <cstdlib>

//打印整形数组
void printfarr(unsigned long *arr, size_t size){
    for (size_t i = 0; i < size; i++)
    {
        printf("%x ", arr[i]);
    }
    printf("\n");
}

//根据传入的数组arr,比较大小,在out上对应标上其大小的顺序值
//总觉得这个算顺序的办法好笨,谁有更好的麻烦贡献出来
void sx(unsigned long* arr, unsigned long *out, size_t size){
    memset(out, -1, size*sizeof(unsigned long));

    for (size_t i = 0; i < size; i++)
    {   
        int min;
        for (size_t j = 0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值