• 什么是堆叠和堆叠?
  • 他们在电脑记忆中身处何方?
  • 它们在多大程度上受到操作系统或语言运行时间的控制?
  • 其范围是什么?
  • 是什么决定了它们的大小?
  • 是什么让一个更快?

当前回答

它们在哪里? 它们在哪里? (在真实的电脑记忆中)

回答: 两者都在记录和档案调控系统。

分会 :

内存就像一个书桌, HDDs/ SSDs( 永久存储) 像书架一样。 要阅读任何东西, 您必须在桌上打开一本书, 您只能在桌子上打开尽可能多的书。 要拿到一本书, 您必须把它从书架上拉出来, 然后在桌子上打开。 要退回一本书, 您必须关闭桌上的书架, 然后把它归还到书架上 。

堆积和堆积是我们给两种方式的汇编者提供的名称,它们将不同种类的数据储存在同一地点(即记录和档案管理)。

其范围是什么?
是什么决定了每个孩子的大小?
是什么让一个更快?

回答:

  1. 堆叠为静态(固定大小)数据

    a 。编译者在编译时读取代码中使用的变量类型。

    (一) 为这些变量分配固定数量的内存。
    二. 此记忆的大小无法增长 。

    b. b. 数据内存是毗连的( 单个区块) , 所以访问是 有时有时 比堆积速度快

    c. 用于以下目的:放置在堆叠堆叠上的一个物体,该物体在超过堆叠大小的运行时会生成内存,导致 堆堆堆堆堆溢溢溢出错误

  2. 堆肥用于动态(变化大小)数据

    a 。内存量仅受内存存储器可用空空空间数量的限制
    (一) 使用的数量在运行时可按需要增长或缩减。

    b. b. 数据由于项目在堆积上分配,只要在内存记录和档案记录室中存在空空空间,数据并不总是在毗连部分中,而 有时有时 访问比堆叠慢

    c. 用于以下目的:程序手动将项目与newkeyword 和 Must 手动移动此内存, 当它们使用它完成后 。
    一. 重复分配新内存的代码,在不再需要新内存时,不将新内存分配到内存泄漏。

分会 :

堆叠和堆积堆肥主要不是为了提高速度而引入;它们被引入是为了处理内存溢出。关于堆叠与堆积之间的第一个关注点应该是是否会出现内存溢出。如果一个对象打算将大小扩大为未知数量(如链接列表或其成员可以持有任意数量数据的对象),则将其放置在堆积上。尽可能使用 C++ 标准库(STL) 容器。矢量, 地图图图图地图, 和列表列表因为它们是记忆和速度效率高的,并增加使你的生活更加轻松(你不必担心记忆分配/迁移)。

在运行您的代码后, 如果您发现代码运行速度慢得令人无法接受, 然后返回并重新构思您的代码, 并查看它是否能够更有效地编程。 它可能会发现问题与堆叠或堆积完全无关( 比如使用迭代算法而不是循环算法, 看看 I/ O 对 CPU 的任务, 也许添加多读或多处理 ) 。

我说有时有时速度较慢/ 较快, 因为程序的速度可能与堆叠或堆叠上分配的项目无关 。

它们在多大程度上受到操作系统或语言运行时间的控制?

回答:

  • 堆叠大小由汇编者在汇编时确定。

  • 在运行期间,堆积大小各有不同。 (堆积在运行时与操作系统一起工作,以分配内存。)

分会 :

以下是更多关于控制和编译时间与运行时间操作的更多信息。

每台电脑都有独特的指令设置结构(ISA),即其硬件指令(例如“MOVE”、“JUMP”、“ADD”等)。

  • 操作系统只不过是一个资源管理者(控制如何/何时/和何处使用内存、处理器、装置和信息)。

  • 安全操作系统的ISA被称为光机其余命令被命名为扩展机内核是扩展机器的第一层。 它控制着类似

    • 确定要使用处理器(调度器)的任务,
    • 分配给任务(调度员)的内存多少或硬件登记册多少,以及
    • 执行任务的顺序(交通控制器)。
  • 当我们说“编译者”时,我们通常是指编译者、组装者和链接者在一起

    • 编译者将源代码转换为组装语言,并将其传给装配者,
    • 装配器将装配语言转换成机码(ISA命令),并传给链接器
    • 链接器将所有机器代码( 可能来自多个源文件) 合并成一个程序 。
  • 机器代码在被执行时传递到内核, 由内核决定它何时应该运行并控制, 但机器代码本身包含ISA命令, 用于请求文件, 请求内存等。 所以代码发布 ISA 命令, 但一切都要通过内核 。

其他回答

1980年代,UNIX像兔子一样向大公司宣传,大公司自行滚动。 埃克森公司拥有一个品牌,历史上损失了几十个品牌。 许多执行者都自行决定如何打下记忆。

典型的 C 程序在记忆中被平整, 有机会通过改变 brk () 值来增加 。 通常, HEAP 略低于此 brk 值, 且增加 brk 增加了可用堆积的数量 。

单一的STACK通常是HEAP以下的一个区域,它是一个内存块,在下一个固定内存块的顶部之前没有任何价值。 下一个区块通常是 CODE , 在其时代著名的黑客之一的堆叠数据中,它可以被堆叠数据覆盖。

一个典型的内存区块是BSS(一个零值块),在一家制造商的报价中,该区块不小心没有零;另一个是DATA,包含初始化值,包括字符串和数字;第三个是CODE,包含 CRT(运行时间)、主机、功能和图书馆。

UNIX 中虚拟内存的出现改变了许多限制。 这些区块需要毗连, 或固定大小, 或以某种特定方式排列, 没有客观的理由。 当然, 在 UNIX 之前的多立方体没有受到这些限制的影响 。 这是一张图表, 显示了那个时代的记忆布局 。

A typical 1980s style UNIX C program memory layout

堆栈基本上是一个容易获取的内存,仅将它的项目管理为-井-堆叠。事先知道大小的项目可以进入堆叠。数字、字符串、布林亚人的情况就是如此。

缩略堆积是您无法预先确定准确大小和结构的物品的内存。由于天体和阵列可以在运行时变异和变化,它们必须进入堆积。

资料来源:学员人数

OK,OK, OK, OK, OK, OK, OK, OK, OK,OK, OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,简言简简短地说,它们的意思是:已订购未排序...!

堆堆叠:在堆叠的物品中,事情会相互占据顶端, 意味着处理的速度会更快,效率会更高!

所以总是有一个索引来指向特定项目, 处理速度也会更快, 这些项目之间也有关系!

堆肥:没有订单,处理速度会放慢, 价值会混乱在一起,没有具体的订单或索引... ......有随机的,它们之间没有关系... 所以执行和使用时间可以不同...

我还创造了下面的图像,以显示他们可能长得如何:

enter image description here

它们在哪里? 它们在哪里? (在真实的电脑记忆中)

回答: 两者都在记录和档案调控系统。

分会 :

内存就像一个书桌, HDDs/ SSDs( 永久存储) 像书架一样。 要阅读任何东西, 您必须在桌上打开一本书, 您只能在桌子上打开尽可能多的书。 要拿到一本书, 您必须把它从书架上拉出来, 然后在桌子上打开。 要退回一本书, 您必须关闭桌上的书架, 然后把它归还到书架上 。

堆积和堆积是我们给两种方式的汇编者提供的名称,它们将不同种类的数据储存在同一地点(即记录和档案管理)。

其范围是什么?
是什么决定了每个孩子的大小?
是什么让一个更快?

回答:

  1. 堆叠为静态(固定大小)数据

    a 。编译者在编译时读取代码中使用的变量类型。

    (一) 为这些变量分配固定数量的内存。
    二. 此记忆的大小无法增长 。

    b. b. 数据内存是毗连的( 单个区块) , 所以访问是 有时有时 比堆积速度快

    c. 用于以下目的:放置在堆叠堆叠上的一个物体,该物体在超过堆叠大小的运行时会生成内存,导致 堆堆堆堆堆溢溢溢出错误

  2. 堆肥用于动态(变化大小)数据

    a 。内存量仅受内存存储器可用空空空间数量的限制
    (一) 使用的数量在运行时可按需要增长或缩减。

    b. b. 数据由于项目在堆积上分配,只要在内存记录和档案记录室中存在空空空间,数据并不总是在毗连部分中,而 有时有时 访问比堆叠慢

    c. 用于以下目的:程序手动将项目与newkeyword 和 Must 手动移动此内存, 当它们使用它完成后 。
    一. 重复分配新内存的代码,在不再需要新内存时,不将新内存分配到内存泄漏。

分会 :

堆叠和堆积堆肥主要不是为了提高速度而引入;它们被引入是为了处理内存溢出。关于堆叠与堆积之间的第一个关注点应该是是否会出现内存溢出。如果一个对象打算将大小扩大为未知数量(如链接列表或其成员可以持有任意数量数据的对象),则将其放置在堆积上。尽可能使用 C++ 标准库(STL) 容器。矢量, 地图图图图地图, 和列表列表因为它们是记忆和速度效率高的,并增加使你的生活更加轻松(你不必担心记忆分配/迁移)。

在运行您的代码后, 如果您发现代码运行速度慢得令人无法接受, 然后返回并重新构思您的代码, 并查看它是否能够更有效地编程。 它可能会发现问题与堆叠或堆积完全无关( 比如使用迭代算法而不是循环算法, 看看 I/ O 对 CPU 的任务, 也许添加多读或多处理 ) 。

我说有时有时速度较慢/ 较快, 因为程序的速度可能与堆叠或堆叠上分配的项目无关 。

它们在多大程度上受到操作系统或语言运行时间的控制?

回答:

  • 堆叠大小由汇编者在汇编时确定。

  • 在运行期间,堆积大小各有不同。 (堆积在运行时与操作系统一起工作,以分配内存。)

分会 :

以下是更多关于控制和编译时间与运行时间操作的更多信息。

每台电脑都有独特的指令设置结构(ISA),即其硬件指令(例如“MOVE”、“JUMP”、“ADD”等)。

  • 操作系统只不过是一个资源管理者(控制如何/何时/和何处使用内存、处理器、装置和信息)。

  • 安全操作系统的ISA被称为光机其余命令被命名为扩展机内核是扩展机器的第一层。 它控制着类似

    • 确定要使用处理器(调度器)的任务,
    • 分配给任务(调度员)的内存多少或硬件登记册多少,以及
    • 执行任务的顺序(交通控制器)。
  • 当我们说“编译者”时,我们通常是指编译者、组装者和链接者在一起

    • 编译者将源代码转换为组装语言,并将其传给装配者,
    • 装配器将装配语言转换成机码(ISA命令),并传给链接器
    • 链接器将所有机器代码( 可能来自多个源文件) 合并成一个程序 。
  • 机器代码在被执行时传递到内核, 由内核决定它何时应该运行并控制, 但机器代码本身包含ISA命令, 用于请求文件, 请求内存等。 所以代码发布 ISA 命令, 但一切都要通过内核 。

简单的说, 堆栈是创建本地变量的地方。 另外, 每次你调用一个子常规, 程序计数器( 指针到下一个机器指令) 和任何重要的登记器, 有时参数会被推到堆叠上。 然后, 子常规内的任何本地变量都会被推到堆叠上( 并在那里使用 ) 。 当子常规完成后, 所有的东西都会从堆叠上跳出来。 PC 和注册数据都会得到并放回原位, 这样您的程序就可以继续其快乐的方式 。

堆积是用( 明确的“ 新 ” 或“ 分配 ” 调用 ” 调用 ) 来分配记忆的动态空间。 它是一个特殊的数据结构, 可以跟踪大小不一的记忆区块及其分配状况 。

在“古典”系统中,内存记录仪被设置得非常清晰,使堆叠指针从记忆的底部开始,堆积指针从顶部开始,它们相互向上发展。如果它们重叠,你就退出内存。虽然这与现代多轨操作系统不起作用。每条线必须有自己的堆叠,并且它们可以动态地生成。