相关疑难解决方法(0)

堆栈和堆的内容和位置是什么?

编程语言书籍解释了在堆栈上创建了值类型,并且在堆上创建了引用类型,而没有解释这两者是什么.我还没有看清楚这个问题.我理解堆栈是什么.但,

  • 它们在哪里和它们(物理上在真实计算机的记忆中)?
  • 它们在多大程度上受操作系统或语言运行时控制?
  • 它们的范围是什么?
  • 是什么决定了它们的大小?
  • 是什么让一个更快?

language-agnostic heap stack memory-management dynamic-memory-allocation

7847
推荐指数
27
解决办法
145万
查看次数

堆栈和堆内存的大小

可能重复:
堆栈和堆的内容和位置是什么?

关于ac程序中内存布局的基本概念,我理解:

  • 该语言使用两个主要数据结构堆栈.
  • 创建堆栈以存储子程序的局部变量和簿记数据
  • 创建堆以存储程序的动态分配变量
  • 堆本质上是可变长度的.(在堆栈上不太确定)
  • 通常,编译器/语言负责在执行之前请求OS创建这些数据结构.

问题

  • 堆栈/堆的初始大小是多少?谁来决定呢?
  • 在哪里创建物理内存?我看到一般描述为"在顶级地址中创建堆栈,在低级别地址创建堆"请详细说明

c heap stack memory-management

43
推荐指数
4
解决办法
6万
查看次数

指针比较在 C 中如何工作?可以比较不指向同一个数组的指针吗?

在 K&R(C 编程语言第 2 版)第 5 章中,我阅读了以下内容:

首先,在某些情况下可以比较指针。如果pq指向同一个数组的成员,则关系一样==!=<>=,等正常工作。

这似乎意味着只能比较指向同一数组的指针。

但是,当我尝试此代码时

    char t = 't';
    char *pt = &t;
    char x = 'x';
    char *px = &x;

    printf("%d\n", pt > px);
Run Code Online (Sandbox Code Playgroud)

1 被打印到屏幕上。

首先,我认为我会得到 undefined 或某种类型或错误,因为ptpx没有指向同一个数组(至少在我的理解中)。

也是pt > px因为两个指针都指向存储在栈上的变量,栈向下增长,所以内存地址t大于x?为什么pt > px是真的?

当 malloc 被引入时,我变得更加困惑。 同样在第 8.7 章的 K&R 中写到以下内容:

然而,仍然存在一种假设,即sbrk可以有意义地比较指向由 返回的不同块的指针。仅允许在数组内进行指针比较的标准并不能保证这一点。因此,这个版本的malloc仅在一般指针比较有意义的机器之间是可移植的。

将指向堆上 malloced …

c pointers heap-memory memory-layout undefined-behavior

35
推荐指数
3
解决办法
5731
查看次数

C是否需要堆栈和堆才能运行?

人们谈论堆栈和堆是什么以及它们之间的差异.但我很想知道如果一个CPU不支持堆栈和堆结构,那么C可以在没有堆栈和堆的情况下正常运行吗?

c heap stack

9
推荐指数
2
解决办法
310
查看次数