Beitrag über mehrere Probleme.
Folgendes ist nicht ausgeglichen ()
. Unklar, was der wahre Code von OP sein könnte.
memset(large_float_array, 0, sizeof(large_float_array);
die obigen einfach weitere )
verwendet Angenommen, dann war Code nur ein paar Bytes Null Füllen mit Null als sizeof(large_float_array)
ist die Größe eines Zeigers.
memset(large_float_array, 0, sizeof(large_float_array));
OP wahrscheinlich wollte etwas wie, die Null den zugewiesenen Raum mit Null Bits füllen würde. Dies bringt den zugewiesenen Speicher in den gleichen Zustand wie calloc()
.
memset(large_float_array, 0, NUM *sizeof *large_float_array);
-Code sollte die folgende verwenden. Ein guter Compiler wird diese triviale Schleife in schnellen Code optimieren.
for (size_t i=0; i<NUM; i++) {
large_float_array[i] = 0.0f;
}
Ein Weg, um die schnelle memcpy()
zu verwenden ist, um die float
in das erste Element des Arrays zu kopieren, dann wird das erste Element mit dem zweiten Element, so werden die ersten 2 Elemente Elemente 3 & 4, dann werden die ersten 4 Elemente Elemente 4,5,6,7 ...
void *memset_size(void *dest, size_t n, const char *src, size_t element) {
if (n > 0 && element > 0) {
memcpy(dest, src, element); // Copy first element
n *= element;
while (n > element) {
size_t remaining = n - element;
size_t n_this_time = remaining > element ? element : remaining;
memcpy((char*)dest + element, dest, n_this_time);
element += n_this_time;
}
}
return dest;
}
float pi = M_PI;
float a[10000];
memset_size(a, 10000, &pi, sizeof pi);
wie bei allen Optimierungen zunächst klar geschriebenen Code betrachten und dann Kandidaten wie die in den ausgewählten Fällen oben verwenden, das es rechtfertigen.
Ich habe gerade gefunden [https://mackiemathew.wordpress.com/2015/06/30/dont-use-memset-for-initializing-floats-or-doubles/], bietet einige Einblicke in meine Frage . –
'memset (large_float_array, 0, sizeof (large_float_array);' kompiliert nicht. Immer freundlich um echten Code zu schreiben. – chux
C schreibt nicht vor, dass Gleitkomma spezifisch ieee754 ist. Daher glaube ich, dass es keine Garantie in der Norm gibt '0.0f' ist bitweise-null – EOF