Преобразование типов 2D-массивов с низкими издержками между Rust и C

#arrays #rust #ffi

#массивы #Ржавчина #ffi

Вопрос:

Я пишу разделяемую библиотеку в Rust, которая предоставит интерфейс, совместимый с C. Одна из функций принимает 2D-массив символов char **obj_ptr , выполняет некоторые простые вычисления над массивом и возвращается вызывающему.

Поскольку эта функция будет вызываться очень часто, все операции должны выполняться быстро. Очевидный способ преобразования массива в представление фрагмента фрагмента потребует итерации по всем элементам. Существует ли быстрый / быстрый способ преобразования 2D-массива в безопасные объекты Rust вместо этого?

Я не смог найти ничего непосредственно по теме представления нетривиальных C-типов в Rust, поэтому любой материал в этом направлении также был бы очень полезен.

Редактировать: каждая строка в массиве имеет одинаковую длину, а размер массива определяется во время выполнения.

Комментарии:

1. что не так с amp;mut [amp;mut [T]] ? срезы имеют небезопасную функцию для создания.

2. @Stargateur Я понимаю, что это было бы дорогостоящим с точки зрения вычислений, скажем, у меня есть (10 ^ 9) элементов Xa, мне пришлось бы перебирать все 10 ^ 9 внешних элементов для построения внутренних срезов.

3. ну, вот почему 2D vector — это зло… вы также можете использовать непосредственно указатель C, что на данный момент не имеет большого значения. Кроме того, откуда вы знаете размер вашего вектора в C? если это классическое значение NULL и 0, то опять же причина вообще не использовать slice и использовать указатель «как в C».

4. Это неровный массив или все char * s указывают на массивы одинаковой длины? Если они имеют одинаковую длину, известна ли длина во время компиляции?

5. @trentcl да, они имеют одинаковую длину, а размер массива определяется во время выполнения.