Mips 输入的字符串,它们应该存储在哪里,是动态数据还是静态数据?

Mips 输入的字符串,它们应该存储在哪里,是动态数据还是静态数据?,mips,Mips,我正在学习使用MIPS和火星模拟器的汇编语言基础。 标题包含了我的问题,但我将尝试用一个例子来扩展它。 假设我们想从键盘读取一个字符串(最多200个字符)。我们必须找到前进的道路 1) 我们在静态数据段上分配201字节,执行系统调用以读取字符串,然后通过“字符串”地址引用它 2) 我们通过sbrk函数(MARS上唯一可用的函数)请求堆上的201个连续字节,然后用输入字符串填充它们 li $v0, 9 la $a0, 201 syscall move $s0, $v0 li $v0,

我正在学习使用MIPS和火星模拟器的汇编语言基础。 标题包含了我的问题,但我将尝试用一个例子来扩展它。 假设我们想从键盘读取一个字符串(最多200个字符)。我们必须找到前进的道路

1) 我们在静态数据段上分配201字节,执行系统调用以读取字符串,然后通过“字符串”地址引用它

2) 我们通过sbrk函数(MARS上唯一可用的函数)请求堆上的201个连续字节,然后用输入字符串填充它们

li  $v0, 9
la  $a0, 201
syscall
move    $s0, $v0

li  $v0, 8
move    $a0, $s0
li  $a1, 201
syscall
两种方法的优缺点是什么?我总是在MIPS示例中看到第一种方法,但我不理解wya第二种方法没有使用


提前感谢:)

第一种方法适用于只需要固定(少量)缓冲区的简单程序。而且不需要释放内存,这对初学者来说更简单

动态分配方法为进程的内存使用提供了更大的灵活性。
例如,您可能只需要暂时使用一个缓冲区,由于内存是一种有限的资源,您可能希望动态分配该内存,以便在不再需要时释放它,而不是在整个进程生命周期内保持静态分配的内存。
还有一种可能性是,您不知道在编译时需要多少内存,因为它可能取决于某些用户输入。这是动态内存分配有用的另一种情况


动态分配内存的缺点是,您(程序员)必须跟踪所有分配。也就是说,您必须确保在某个时候释放已分配的内存,但您还需要确保在释放内存之前,您的程序已使用该内存块完成(否则可能会导致指针悬空)。

示例不使用第二种方法来简单地保持示例。一个真正的程序可能使用这两种方法中的任何一种。
li  $v0, 9
la  $a0, 201
syscall
move    $s0, $v0

li  $v0, 8
move    $a0, $s0
li  $a1, 201
syscall