【发布时间】:2017-06-24 04:41:56
【问题描述】:
在数组开头插入整数的方法是什么?
例子:
注册 $s0 = 4(数组中的元素数)
寄存器$s1 = 0x10040000(数组开头的地址)
0x10040000 10
0x10040004 20
0x10040008 30
0x1000400C 40
我想在 0x10040000 处插入一个 int,比如 5 并将所有内容向下移动:
0x10040000 5
0x10040004 10
0x10040008 20
0x1000400C 30
0x10004010 40
我能够做到的一种方法是在数组之前的地址处插入 5,但我想做的是在数组的开头插入 5 并将其他所有内容向下移动
【问题讨论】:
-
好吧,如果你不再把它想象成一个数组,而只看两个“内存图像”,就很明显需要做什么了。您需要将内存内容向上移动 4 个字节(
0x10040000中的 4 个字),然后将5写入0x10040000。这种memmove,要以最佳方式完成,通常是非常特定于CPU的(不确定MIPS),但是当性能不是问题时,你只需要i=4; while (i--) array[i+1] = array[i];(从数组端开始,所以你不要' t 用移动的值覆盖原始值)。 -
顺便说一句,这就是为什么 C++
vector<>被认为插入“慢”的原因,因为您总是需要移动数组的剩余部分以在连续存储中创建空槽,但是计算机喜欢使用连续打包好的数据结构,因此这种插入惩罚通常会在进一步处理中迅速恢复,所以不要低估vector<>结构的力量,而不是猜测使用分析来找到真正的性能。vector<>类型的数据结构通常是初始版本的最佳开始。
标签: arrays assembly mips mips32