内联汇编代码替换其中一个for循环中的C++语句.
有时它神奇地工作并产生正确的结果 - 使用基数排序排序的数组.另一次Xcode生成一个Thread 1: EXC_BAD_ACCESS (code=1, address=0x1eccccccccd)错误,我incq (%[count], %%rdx, 4)使用反汇编视图追溯到行.
我的理解
反汇编视图incq (%[count], %%rdx, 4)为incq (%rax,%rdx,4).这可能意味着相同的寄存器用于不同的操作数(%%rax已在线使用movq (%[array], %%rcx, 4), %%rax),问题在于此处:: [array] "r" (array), [count] "r" (count), "b" (digit), "c" (i).
我不明白的是
如何管理寄存器,以便我可以使用足够的寄存器(分配给输入操作数以及后面的正文代码)并且它们不会同时重叠.我尝试了几种组合,但没有一种有效.
void countingSort(int array[], int length, int digit) {
int i, count[10] = { };
int sorted[length];
// Store number of occurrences in count[].
// for (i = 0; i < length; i++)
// …Run Code Online (Sandbox Code Playgroud)