我应该使用什么类型的索引变量

时间:2010-10-27 15:51:05

标签: c++ cuda

这是一个最佳实践问题。我正在制作一个数组

type * x = malloc(size*sizeof(type));

AFAIK sizeof给出size_t的返回值。这是否意味着我应该使用size_t来声明或传递大小?另外,当索引数组时,我还应该使用size_t作为索引变量吗?这些最佳做法是什么?这不是他们在学校教的东西,现在我正在学习我想知道的严肃的c ++。

另外,如果有人参考我可以找到这种东西的最佳实践,那会有帮助吗?程序员预订的礼仪。

编辑: malloc应该是cudaHostAlloc或cudaMalloc,因为我正在开发一个同时在设备和主机上存储数组的类,并同时更新它们。因此,malloc只是我实际要做的事情的持有者。

5 个答案:

答案 0 :(得分:6)

通常,我使用任何最小化隐式或显式强制转换和警告错误的数量。一般来说,有很好的理由可以按照自己的方式输入内容。 size_t是数组索引的不错选择,因为它是unsigned,您通常不想访问myarray[-1],例如。

顺便说一句,因为这是C ++,你应该养成使用mallocfree)的习惯,这是CRT(C运行时库)的一部分。使用newdelete),最好使用smart pointers,以尽量减少手动内存处理。

掌握了基础知识后,良好实践参考(特定语言)为Effective C++ by Scott Meyers。合乎逻辑的下一步是Effective STL

答案 1 :(得分:4)

参考您的后续问题:

我用于一般高级编程的最佳参考“当前的良好实践”有点像:

Code Complete by Steve McConnell (ISBN 0-7356-1967-0)

我一直在引用它。当我的公司正式编写其编码标准时,我是根据它编写的。它并没有像设计或体系结构那样多,但是为了实际敲打代码,这本书被恰当地命名。

答案 2 :(得分:2)

cudaMalloc的大小为size_t,因此为了保持一致性,您应该将其用于索引。

答案 3 :(得分:0)

好吧,既然你已经放弃了最佳实践,甚至是好的练习,那么使用malloc ......为什么它真的重要?

那就是说,我通常使用size_t,除非我需要一种可以对各种半稀有条件产生负面影响的类型。

答案 4 :(得分:-1)

我希望int超过size_t有几个原因:

  1. 原始类型应该是首选,除非typedef提供了一些基本上新的东西,size_t这里没有
  2. size_t在不同系统上的定义不同,可能会为某些开发人员带来惊喜
  3. 已签名int可避免for (size_t i=9; i>=0; --i)个错误,以及条件中的其他错误,例如if (result < 1)if ((i-2)/2 < 1)
  4. size_t是一种无用的抽象,通过消除下溢来掩盖不需要的行为