标签: stack-memory

内存中的栈真的是栈吗?

在内存中,有一个称为堆栈的部分,它从顶部开始,向下向堆增长。该堆栈与 LIFO 堆栈相同吗?底部的堆是 FIFO 吗?

当你执行“push”和“pop”时,这会改变内存中的堆栈吗?

memory terminology heap-memory stack-memory

5
推荐指数
1
解决办法
975
查看次数

堆栈帧大小是否有上限

我们有一个堆的内存不足错误,但是(只是出于好奇而询问)单个堆栈的大小是否有相同的限制?如果不是,那么如果堆栈帧(如数千个局部变量等)需要多余的内存,那么什么可以防止这种溢出?

java jvm heap-memory out-of-memory stack-memory

5
推荐指数
1
解决办法
1914
查看次数

当您将数据压入堆栈或从堆栈中弹出数据时,您到底在移动什么?

这涉及基本的计算机体系结构,即具有堆栈的体系结构,没有特别的。

使用 FILO(先进后出)方法,就像使用 Intel x86 一样,您使用推送和弹出,但是什么表示或决定推送的内容?

例如,我想推送一个“变量”,比如说......我们知道芯片中的所有内容都只是两伏的二进制位、逻辑驱动电路、门、晶体管等。当我推送一个字节时包含以二进制表示的地址,如下所示:1000 0101、133或85(十六进制),一个值被移动到堆栈......这里有一些问题:

1.堆栈到底位于芯片中的什么位置?

2.芯片上的堆栈配置如何启用/禁用数据块的进出?

3.在多任务环境中通常有多个堆栈。额外的堆栈是如何或从哪里来的?

我知道这可能是题外话,但我希望从硬件方面更好地了解堆栈本身。不,我不想看到板的图片,我明白了,但我想设想数据如何到达它,堆栈到底在哪里,它在芯片中是什么,以及它是如何配置的。

assembly callstack stack-memory

5
推荐指数
1
解决办法
3087
查看次数

字符串类型是存储在堆上还是堆栈上?

这是让我困惑的地方:在 .NET 中,string类型是一个类,但它的行为看起来像是一个值类型!

那么是string值类型(堆栈内存)还是引用类型(堆内存)?

.net string heap-memory primitive-types stack-memory

5
推荐指数
1
解决办法
2311
查看次数

线程堆栈分配

我们知道每个线程都有自己的堆栈。这些堆栈分配在哪里?我读了一些文档,似乎堆栈是在创建线程时从堆中分配的。这有道理吗?提前致谢!

c memory multithreading stack-memory

5
推荐指数
1
解决办法
3699
查看次数

用PHP堆栈和堆?

我正在学习操作系统,而我完全不了解的是堆栈和堆栈.我知道它们的好处以及它们的工作原理,但在动态语言的情况下,我无法弄清楚堆栈是如何分配的.

在静态类型语言中,所有原始数据类型都存储在堆栈中,因为它们很小并且将按照它们分配的相同顺序或多或少地解除分配,但是在像PHP这样的语言中,这在运行时才知道.那么堆栈大小和变量分配怎么可能呢?

如果我理解正确,则通过分析原始数据类型的数量和一些偏移量来确定堆栈大小.如何在PHP或其他动态语言中完成该过程?

如果这个问题在黑暗中发生,请给我一些指导如何了解这一点

php dynamic-languages heap-memory stack-memory

5
推荐指数
1
解决办法
6807
查看次数

如何测量 Rust 中的函数堆栈使用情况?

有没有办法测量一个函数使用了多少堆栈内存?

这个问题不是针对递归函数的;但是我很想知道递归调用的函数会占用多少堆栈内存。

我有兴趣优化堆栈内存使用的函数;然而,在不知道编译器已经进行了哪些优化的情况下,这只是猜测是否正在做出真正的改进。

需要明确的是,这不是关于如何优化以获得更好的堆栈使用的问题。

那么有没有可靠的方法来找出一个函数在 Rust 中使用了多少堆栈内存?


请注意,其他编译器支持这一点,-fstack-usage例如GCC 。

stack-memory rust

5
推荐指数
1
解决办法
659
查看次数

为什么 size 命令没有列出任何可执行文件或目标文件的堆栈或堆段?

size在 Unix 系统中对可执行文件或目标文件使用该命令时,我们以文本段和数据段大小的形式获得输出。为什么不显示堆或堆栈段的输出?下面是 size 命令的输出

 $ size hello_world-1 hello_world-1.o 


text   data   bss    dec   hex   filename
 916    256     4   1176   498   hello_world-1
  48      0     0     48    30   hello_world-1.o
Run Code Online (Sandbox Code Playgroud)

c operating-system memory-management heap-memory stack-memory

5
推荐指数
1
解决办法
401
查看次数

操作系统内核数据的位置

我是操作系统的初学者,我有一个关于操作系统内核的问题。

我习惯于每个用户进程都有一个堆栈、堆、数据和代码的虚拟地址空间的标准概念。我的问题是,当操作系统内核发生上下文切换时,内核中运行的代码是否被视为具有堆栈、堆、数据和代码的进程?

我知道有一个专用的内核堆栈,用户程序无法访问它。它是否位于用户程序地址空间中?

我知道操作系统需要维护一些数据结构才能完成它的工作,比如进程控制块。这些数据结构位于何处?它们是否在用户程序地址空间中?它们是否在内核数据结构的某个专用内存段中?它们是否散布在有空间的物理内存周围?

最后,我看到了一些图表,其中操作系统代码位于用户程序地址空间的顶部。整个操作系统内核都在这里吗?如果没有,操作系统内核的代码还驻留在何处?

谢谢你的帮助!

location operating-system kernel heap-memory stack-memory

4
推荐指数
1
解决办法
1988
查看次数

“String”总是分配在堆上吗?

在这个Rust 文档中,写道:

字符串是在堆上分配的。

但是,当我查看内存映射时,我发现它是在堆栈中分配的......

让我们考虑下面的基本 Rust 源文件:

// rustc -o string_vs_str -C opt-level=0 -C debuginfo=2 main.rs

fn main() {
    let my_string: String = String::from("abc");
    let my_str: &str = "def";
    println!("{}{}", my_string, my_str);
    let my_string_str: &str = my_string.as_str();
    println!("my_string_str: {}", my_string_str);
}
Run Code Online (Sandbox Code Playgroud)

让我们根据以下命令在可执行文件上执行 RUST-GDB:

# rust-gdb --batch --command=test.gdb --args ./string_vs_str

set width 0
set height 0
set verbose off

### Set 2 breakpoints
b main.rs:6
b main.rs:8

### Start the process
r

### Display the memory mapping into the …
Run Code Online (Sandbox Code Playgroud)

string heap-memory stack-memory rust

4
推荐指数
1
解决办法
706
查看次数