Re[10]: Заполнить DWORD нулями?
От: Аноним  
Дата: 19.08.08 10:34
Оценка:
А>>>Вот, оптимизированный вариант. Быстро обнуляет все DWORDы в указанном процессе. Масштабируется на любое количество процессоров.
P>Так ведь микросхемы памяти все равно только последовательный доступ поддерживают... Масштабироваться будет не очень хорошо.
С чего бы это? Память просто достается/пишеться cache line'ами, которые уже сами могут сбрасываться в любом порядке. А у меня каждый поток пишет в свой регион.. Хотя конечно стоит подумать о выравнивании по границе стека, но это только если профайлер покажет что это и есть узкое место алгоритма
Re[11]: Заполнить DWORD нулями?
От: Аноним  
Дата: 19.08.08 11:15
Оценка:
А>С чего бы это? Память просто достается/пишеться cache line'ами, которые уже сами могут сбрасываться в любом порядке. А у меня каждый поток пишет в свой регион.. Хотя конечно стоит подумать о выравнивании по границе стека, но это только если профайлер покажет что это и есть узкое место алгоритма
Хм хм хм... VTune посоветовал писать блоками по 2 мб..
Re: Заполнить DWORD нулями?
От: Alexander G Украина  
Дата: 19.08.08 11:50
Оценка:
Здравствуйте, Den Raskovalov, Вы писали:

DR>Всем привет


DR>Мне нужно записать в DWORD значение ноль. Как это проще всего сделать? Поиском пользовался — глухо. Не хочется писать свой велосипед. Пользуюсь Visual Studio 2005. Язык — C++.


Для начала следует выяснить что именно понимается под DWORD.
Возможно под тем DWORD ом хранится число, а возможно указатель. Поэтому могут требоваться различные типы DWORDов: DWORD, DWORD64, DWORD_PTR. Если под DWORDом поинмается дескриптор, то на самом деле там может быть как DWORD (или, что в данном случае то же самое, LONG), так и указатель на структуру.
Для повышения инкапсуляции хендлов могут быть использованы даже не указатели на структуры, а собственно структуры.

Язык С++ предоставляет шаблоны для реализации высокоуровневых абстракции, что позволяет составлять обобщённые алгоритмы, работающие с различными типами данных, в том числе и типами, разработанными после составления этих алгоритмов. Компилятор в Visual Studio 2005 предоставляет дополнительные расширения, упрощающий реализацию шаблонов. Так, подпрограмма для обнуления DWORD может быть реализована следующим образом:

template <class DWORD> void nullify(DWORD& dword)
{
  dword = DWORD();
}

Пример использования:
int _tmain(int argc, _TCHAR* argv[])
{
  DWORD s1;
  DWORD_PTR s2;
  DWORD64 s3;
  struct { DWORD unused; } * s4;
  struct { DWORD unused; } s5;
  nullify(s1);
  nullify(s2);
  nullify(s3);
  nullify(s4);
  nullify(s5);
  return 0;
}



Кстати, буквально "double word" означает "двойное слово", поэтому размер "настоящего" DWORD зависит от разрядности процессора и равен 64 битам на 32разрядном процессоре. Реализации DWORD из windows.h однако имеют другой размер — по историческим причинам.
Русский военный корабль идёт ко дну!
Re: Заполнить DWORD нулями?
От: xmen  
Дата: 20.08.08 15:16
Оценка:
Здравствуйте, Den Raskovalov, Вы писали:

DR>Всем привет


DR>Мне нужно записать в DWORD значение ноль. Как это проще всего сделать? Поиском пользовался — глухо. Не хочется писать свой велосипед. Пользуюсь Visual Studio 2005. Язык — C++.


DWORD z, m, i = 0;

ZeroMemory(&z, sizeof(DWORD));
memset(&m, 0, sizeof(DWORD));

printf("ZM = %d\nMS = %d\ni = %d", z, m, i);

ZM = 0
MS = 0
i = 0

что еще нужно?
Re[2]: Заполнить DWORD нулями?
От: Аноним  
Дата: 20.08.08 15:29
Оценка: 1 (1) :)
X>что еще нужно?
Ч/Ю
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.