Здравствуйте, adontz, Вы писали:
A>А в чём разница? Такая вот принципиальная, что один другим в каких-то случаях не заменить или это проблематично?
За C++ точно не скажу, но припоминаю, что в C основным отличием было то, что calloc выделенную память инициализирует нулями.
Здравствуйте, adontz, Вы писали:
a> А в чём разница?
В том, что calloc принимает количество элементов (n) и размер (s), выделяет n * s (или чуть больше)
байт памяти (обычно через malloc) и обнуляет выделенную память. malloc просто выделяет память.
a> Такая вот принципиальная, что один другим в каких-то случаях не заменить или это проблематично?
calloc(n, s) с легкостью может быть заменен двумя последовательными вызовами malloc и memset.
Posted via RSDN NNTP Server 1.7 "Bedlam"
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
A>А в чём разница? Такая вот принципиальная, что один другим в каких-то случаях не заменить или это проблематично?
calloc инициализурет память нулями. То есть например, у нас есть структура:
struct S {
int a; //must be ZERO!int b; //must be ZERO!int c; //must be ZERO!int d; //must be ZERO!int e; //Put value here!
};
S* ps;
Здравствуйте, Vamp, Вы писали:
V> calloc инициализурет память нулями
Только важно учитывать, что это не то же, что обнуление элементов, т.к. битовая последовательность
из одних нулей далеко не обязательно соответствует, например, 0.0f, false или (void*)0.
Posted via RSDN NNTP Server 1.7 "Bedlam"
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[3]: calloc и malloc
От:
Аноним
Дата:
25.09.03 14:39
Оценка:
Здравствуйте, Павел Кузнецов, Вы писали:
V>> calloc инициализурет память нулями
ПК>Только важно учитывать, что это не то же, что обнуление элементов, т.к. битовая последовательность ПК>из одних нулей далеко не обязательно соответствует, например, 0.0f, false или (void*)0.
Здравствуйте, Павел Кузнецов, Вы писали:
ПК>Здравствуйте, Vamp, Вы писали:
V>> calloc инициализурет память нулями
ПК>Только важно учитывать, что это не то же, что обнуление элементов, т.к. битовая последовательность ПК>из одних нулей далеко не обязательно соответствует, например, 0.0f, false или (void*)0.
Здравствуйте, Вадим Никулин, Вы писали:
V>>> calloc инициализурет память нулями
ПК>>Только важно учитывать, что это не то же, что обнуление элементов, т.к. битовая последовательность ПК>>из одних нулей далеко не обязательно соответствует, например, 0.0f, false или (void*)0.
ВН>А можно пример такой платформы/компилятора?
Здравствуйте, Вадим Никулин, Вы писали:
ПК>>Только важно учитывать, что это не то же, что обнуление элементов, т.к. битовая последовательность ПК>>из одних нулей далеко не обязательно соответствует, например, 0.0f, false или (void*)0.
ВН>А можно пример такой платформы/компилятора?
Практически любой, посмотри чему равно a0 и a1 в памяти:
struct A
{
int a;
};
int main()
{
int A::*a0 = &A::a;
int A::*a1 = 0;
return 0;
}
ПК>из одних нулей далеко не обязательно соответствует, например, 0.0f, false или (void*)0.
Насчет последних понятно. Но любопытно, а как еще может быть представлен 0.0f , кроме как 0x00?
Да здравствует мыло душистое и веревка пушистая.
Re[5]: calloc и malloc
От:
Аноним
Дата:
26.09.03 09:21
Оценка:
ПК>>>Только важно учитывать, что это не то же, что обнуление элементов, т.к. битовая последовательность ПК>>>из одних нулей далеко не обязательно соответствует, например, 0.0f, false или (void*)0.
ВН>>А можно пример такой платформы/компилятора?
АТ>А зачем пример-то?
Здравствуйте, Вы писали:
ПК>>>> битовая последовательность из одних нулей далеко ПК>>>> не обязательно соответствует, например, 0.0f, false или (void*)0.
ВН>>> А можно пример такой платформы/компилятора?
АТ>> А зачем пример-то?
> Теоретикам примеры не нужны?
Достаточно того, что стандарт не дает соответствующих гарантий относительно представления значений.
Вообще-то это более-менее стандартная рекомендация для написания переносимого кода...
Примеров можно выдумать миллион не отходя от кассы. Начиная с классического неравенства представления
(void*)0 нулю (на физическом уровне) для диагностики обращений по нулевому указателю. То же может быть
верным и в отношении чисел с плавающей запятой: разработчики вполне могут взводить какие-нибудь битики
для run-time диагностики соответствия типов и т.п. Можно также рассмотреть интерпретаторы C++, в которых
даже представление int, вообще, может отличаться от "машинного" и т.п.
5.17: Seriously, have any actual machines really used nonzero null pointers <...>?
A: The Prime 50 series used segment 07777, offset 0 for the null pointer, at least for PL/I. Later models
used segment 0, offset 0 for null pointers in C, necessitating new instructions such as TCNP (Test C Null
Pointer), evidently as a sop to all the extant poorly-written C code which made incorrect assumptions.
<...>
Some Honeywell-Bull mainframes use the bit pattern 06000 for (internal) null pointers.
The CDC Cyber 180 Series has 48-bit pointers consisting of a ring, segment, and offset. Most users
(in ring 11) have null pointers of 0xB00000000000. It was common on old CDC ones-complement machines to use
an all-one-bits word as a special flag for all kinds of data, including invalid addresses.
<...>
The Symbolics Lisp Machine, a tagged architecture, does not even have conventional numeric pointers;
it uses the pair (basically a nonexistent <object, offset> handle) as a C null pointer.
<...>
Posted via RSDN NNTP Server 1.7 "Bedlam"
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен