c++ - C中的内存分配过程?是自上而下还是自下而上的方法

标签 c++ c pointers memory allocation

#include<stdio.h> 
int main() 
{
    int a,b,*p,*q; 
    a=10; b=5; p=&a; q=&b; 
    float c=3.4, d=4.3, *r,*t;
    r=&c; t=&d; 
    char s='o'; 
    printf("address of a=%u\n",p); 
    printf("address of b=%u\n",q);
    printf("address of c=%u\n",r); 
    printf("address of d=%u\n",t); 
    printf("address of s=%u\n",&s); 
    return 0; 
}

这些代码输出像

address of a=1999992860
address of b=1999992856
address of c=1999992852
address of d=1999992848
address of s=1999992847

如果内存分配采用自上而下的方法,那么“d”如何将 1 个字节作为浮点变量?

如果它是自下而上的方法,但实际上并没有采用,那也没关系。

现在,如果我认为自下而上的方法已经完成,那么通过更改 char s='o'

处的代码

在初始化int a,b之前,它会给出一些不同的结果。

address of `a=2987907272`
address of `b=2987907268`
address of `c=2987907264`
address of `d=2987907260`
address of `s=2987907279`

请帮忙。

最佳答案

我想你是在问报告的变量地址是起始地址还是结束地址。它是前者,一个起始地址。对象占用地址连续递增的字节。

但是,请注意,神圣标准并没有限制一个对象驻留在连续的字节中,而是谈论一个区域的存储,特别是为了支持多个虚拟继承,可以不连续。

然而,在实践中,最派生的对象占用连续的存储空间。

关于c++ - C中的内存分配过程?是自上而下还是自下而上的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21301081/

相关文章:

objective-c - C 和 Objective-C - 释放无符号字符指针的正确方法

c++ - 对于这种情况,什么是好的构建模式? (分区工具)

c - 如何使用 CUDA 中的图形函数?

c++ - 将 uint8_t 与数字进行比较

c - 重新分配后打印字符串数组时遇到问题?

c - 为什么全局指针不能重新指向另一个对象,而局部指针可以?

swift - 如何快速将自身转换为UnsafeMutablePointer <Void>类型

c++ - 相互友情指点 : What Pattern or anti-pattern is this?

c++ srand(time(0)) 在猜谜游戏中不起作用

c++ - 编写一个只接受文字 `0` 或文字 `1` 作为参数的函数