c - 2D char 数组或 1D 数组到 char 指针哪个更快?

标签 c arrays dynamic

我只需要知道哪个数组更快:2D 字符数组或 1D 字符指针数组。

例如:

char* name1[]={"Marc", "Jean-Marie", "Paul", ...}
char name2[][11]={"Marc", "Jean-Marie", "Paul", ...}

如果我有相同的代码来对这些数组进行排序,哪一个会更快完成?

最佳答案

对第二个变体进行排序将需要使用中间缓冲区或逐字节/基于 block 的交换进行字符串副本。这可能比简单地移动指针“慢”。

相反,使用指向实际字符串文字的指针意味着仅在排序时交换指针。所以这可能会“更快”。

此外,编译器很可能将您的字符串文字在内存中打包得更紧密,这有助于提高缓存性能(假设您实际上想要对数量多于 3 个的字符串进行排序)。

但是,对于您给出的示例。这并不完全清楚。在具有较大 native 类型(例如指针或特殊 SIMD 增强功能)的系统上,完全有可能将 2D 数组中的字符串交换优化到几乎无法测量差异的程度。虽然这高度依赖底层内存架构,以及是否非常关心对齐。

最后一点是,如果您有一个非常大的二维数组,则需要静态或在堆上分配它,因为它可能不适合堆栈。

当然,您可能只会在非常大的数组大小上开始看到可测量的差异。使用 3 个字符串的示例是相当荒谬的。

关于c - 2D char 数组或 1D 数组到 char 指针哪个更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55349898/

相关文章:

c++ - 为什么两个几乎相同的实现有很大的执行时间差异?

javascript - 从数组获取 View

python - 字典的稀疏数组 - 高效表示

javascript - 使用 array.includes 进行松散相等比较

linq - 如何调用动态指定不同表名的 Linq-to-Entities (EF4) 查询?

c - 如何将 (long *) 转换为二维 long 数组

c - 用户输入另一个数据时的数组放置

C : double pointer passed as parameters comes back empty

用于引用 textView 的 Android id 数组

c++ - 如何在 C++ 中将大小动态分配给数组?