Какой тип я должен использовать для индексной переменной - PullRequest
5 голосов
/ 27 октября 2010

Это вопрос передового опыта. Я делаю массив

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

AFAIK sizeof возвращает значение size_t. Означает ли это, что я должен использовать size_t, чтобы объявить, или передать размер? Также при индексации массива я должен также использовать size_t для индексной переменной? Какова лучшая практика для этих? Это не то, чему они учили в школе, и теперь, когда я серьезно изучаю c ++, я хочу знать.

Также, если у кого-нибудь есть ссылки на то, где я могу найти лучшие практики для такого рода вещей, это было бы полезно? Вид этикета для программистов книга.

EDIT: Malloc должен быть cudaHostAlloc или cudaMalloc, так как я разрабатываю класс, который одновременно хранит массив на устройстве и хосте и обновляет оба одновременно. Так что malloc здесь просто место для того, что я на самом деле буду делать.

Ответы [ 5 ]

6 голосов
/ 27 октября 2010

В общем, я использую все, что минимизирует количество явных или явных приведений и предупреждений об ошибках.Как правило, есть веская причина, почему вещи печатаются так, как они есть.size_t является хорошим выбором для индекса массива, поскольку он unsigned, и вы, как правило, не хотите обращаться к myarray[-1], скажем.

Кстати, так как это C ++, вы должны выйти из привычкииспользуя malloc (free), который является частью CRT (библиотека времени выполнения C).Используйте new (delete), предпочтительно с интеллектуальными указателями , чтобы минимизировать ручную обработку памяти.

Как только вы освоите основы, справочник по хорошей практике (для конкретного языка) будет Эффективный C ++, Скотт Мейерс .Следующим логическим шагом является Эффективный STL .

4 голосов
/ 27 октября 2010

В связи с вашим последующим вопросом:

Лучшая справочная информация, которую я использовал для общего высокоуровневого программирования, типа «текущие передовые практики»:

Код заполнен Стивом Макконнеллом (ISBN 0-7356-1967-0)

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

2 голосов
/ 27 октября 2010

cudaMalloc принимает размер типа size_t, поэтому для согласованности это то, что вы должны использовать для индексов.

0 голосов
/ 27 октября 2010

Я бы предпочел 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)

size_t - бесполезная абстракция, которая маскирует нежелательное поведение, заставляя замолчать недопустимые значения

0 голосов
/ 27 октября 2010

Ну, так как вы уже отказались от лучшей практики, даже от ХОРОШЕЙ практики, используя malloc ... почему это действительно имеет значение?стать отрицательным для различных редких состояний.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...