C x86汇编(AT&;T):通过指向指针的指针对二维数组进行动态内存分配

C x86汇编(AT&;T):通过指向指针的指针对二维数组进行动态内存分配,c,pointers,assembly,x86,att,C,Pointers,Assembly,X86,Att,我试图通过创建指向指针的指针来动态地将内存分配给二维数组。换句话说,我试图模拟以下C代码: #include <stdio.h> #include <stdlib.h> int main() { int r = 3, c = 3, i, j, count; int **arr = (int **)malloc(r * sizeof(int *)); for (i=0; i<r; i++) arr[i

我试图通过创建指向指针的指针来动态地将内存分配给二维数组。换句话说,我试图模拟以下C代码:

#include <stdio.h> 
#include <stdlib.h> 
  
int main() 
{ 
    int r = 3, c = 3, i, j, count; 
  
    int **arr = (int **)malloc(r * sizeof(int *)); 
    for (i=0; i<r; i++) 
         arr[i] = (int *)malloc(c * sizeof(int)); 
}
然而,在第二部分,我将如何在每一行分配回忆录?上面的代码将返回指向EAX寄存器中矩阵的指针,因此我考虑:

movl ($eax), %eax

它将返回第一行的内存地址。然后如何在特定的内存地址分配空间?根据我目前对汇编的基本知识,
malloc
只能分配内存,然后返回指向内存地址的指针,但我不知道如何使用该命令在指向特定内存地址的指针上分配内存

,这不是2D数组,而是指向数组的指针数组。在C语言中,2D数组是真实的(
int-foo[rows][cols]
,一个数组数组),其中所有
int
元素彼此相邻,不涉及指针。您可以通过调用
malloc(sizeof(int)*rows*cols)
来分配一个。(并将结果分配给
int(*arr2d)[cols]
,)@PeterCordes感谢您的快速响应:D。因为您说过上面的示例是指向数组的指针数组,这意味着指向行数组的指针是连续分配的。因此,解决方案是使用循环,使用malloc(cols*4)分配行数组,并且由于malloc返回指向该数组的指针,所以在最终将指针推到第一行指针之前,将该指针推到行指针数组中的适当位置?为什么首先需要一个指针数组,而不是实际的二维阵列?在C语言中,这种效率低下的正常借口是使用它的语法可能更简单,但这不适用于asm。在asm中,通过
row*row\u width+col*element\u width
进行索引通常比两次解引用更容易。但是是的,如果你坚持用愚蠢的方式,你会调用
malloc
N次,将结果存储到初始指针数组的元素中。@PeterCordes明白了。我想我会转而使用索引:D。
movl $12, %edi
extern malloc
call malloc
movl ($eax), %eax