[devel] Re: bloom filters
Alexey Tourbin
=?iso-8859-1?q?at_=CE=C1_altlinux=2Eru?=
Пн Сен 19 19:03:26 MSD 2005
On Mon, Sep 19, 2005 at 11:43:54PM +0900, Ivan Fedorov wrote:
> Программы имеют свойство толстеть со временем, так что IMHO лучше сразу
> такое вырезать на корню.
Здесь немного другой случай. В программах, которые "разово" запускаются
из командной строки, free() можно не делать. Это специально так было в
UNIX'е придумано. malloc по сути всего лишь раздвигает хип. man brk.
Утечка памяти -- это не тогда, когда на какой-нибудь malloc() нету
комплементарного free(), а когда хип с течением времени продолжает
необоснованно раздвигаться; истощая, как говорится, системные реусурсы.
> Я вот однажды потратил год, на отлов плавающего бага. А все потому, что
> кое-кто поленился подумать немного и исправить его. Он просто поставил
> костыль, который работал почти всегда... но иногда не работал... Вот
> когда этот баг меня достал окончательно, я три ночи не спал вообще. Я
> ложился в 6 часов, а вставал в 7:30... Я целенаправленно отловил и
> исправил этот баг, а ведь изначально он ловился ОЧЕНЬ легко... ;(
>
> Давайте не будем усложнять себе жизнь в будущем - если делаешь, то делай
> как надо, а не как получится!
Ох... okay.
--- bloom.c- 2005-09-18 19:06:33 +0000
+++ bloom.c 2005-09-19 14:44:50 +0000
@@ -109,6 +123,7 @@ int main(int argc, char *argv[])
size_t n = 1024;
double p = 0.01;
char *e = NULL;
+ BF *bf = NULL;
int c;
while ((c = getopt(argc, argv, "n:p:e:")) != -1) {
switch (c) {
@@ -133,14 +148,14 @@ int main(int argc, char *argv[])
int exists;
FILE *fp = fopen(argv[optind], "r");
assert(fp);
- BF *bf = BF_load(fp);
+ bf = BF_load(fp);
exists = BF_exists(bf, e, strlen(e));
exit(!exists);
} else {
char line[1024];
- BF *bf = BF_new(n, p);
FILE *fp = fopen(argv[optind], "r");
assert(fp);
+ bf = BF_new(n, p);
while (fgets(line, sizeof(line), fp)) {
int len = strlen(line);
if (line[len - 1] == '\n')
@@ -149,5 +164,81 @@ int main(int argc, char *argv[])
}
BF_save(bf, stdout);
}
+ free(bf);
return 0;
}
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя : =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Тип : application/pgp-signature
Размер : 189 байтов
Описание: =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Url : <http://lists.altlinux.org/pipermail/devel/attachments/20050919/d69bea47/attachment-0001.bin>
Подробная информация о списке рассылки Devel