我只需要知道哪个数组更快: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/