proba.c, malloc(), memset(), "Killed" ...
23 отговора
711 прегледа
ето 2 варианта (2.6.7):
null:
Segmentation fault:
разликата между двата варианта е само в печата: към stdout или към stderr.
ако вдигна размера на блоковете памет от 12*1024 на 13*1024 също не ми гърми със segm. fault, а успешно принтва нулл.
....
Satan`s Defloration Incorporated
int main() {
while (1) {
//void *p = malloc(10 * 1024 * 1024);
//void *p = malloc(13 * 1024);
void *p = malloc(12 * 1024);
if (!p) {
fprintf(stdout, "null\n");
//fprintf(stderr, "null\n");
return 0;
}
printf(".");
fflush(stdout);
//memset(p, 0, 10 * 1024 * 1024);
}
}
--------------
Segmentation fault:
int main() {
while (1) {
//void *p = malloc(10 * 1024 * 1024);
//void *p = malloc(13 * 1024);
void *p = malloc(12 * 1024);
if (!p) {
//fprintf(stdout, "null\n");
fprintf(stderr, "null\n");
return 0;
}
printf(".");
fflush(stdout);
//memset(p, 0, 10 * 1024 * 1024);
}
}
--------------
разликата между двата варианта е само в печата: към stdout или към stderr.
ако вдигна размера на блоковете памет от 12*1024 на 13*1024 също не ми гърми със segm. fault, а успешно принтва нулл.
....
Satan`s Defloration Incorporated
Re: проблем 2 сякаш изчезна, но Killed си е Killed
прав си. не съм си го превел правилно този текст. не пише, че няма да убие ако опцията не е избрана.
Satan`s Defloration Incorporated
Satan`s Defloration Incorporated
Re: ето 2 варианта (2.6.7):
Мдаа, явно има нещо бъгаво в цялата работа. Ако блоковете памет са малки (12К, 13К все тая) си гърми всеки път с "killed" :) На всичкото отгоре успява да убие и още някой друг беззащитен процес :)
Тъй като гледам с gdb, вероятно някой друг в libc не проверява дали malloc връща 0. За което никак не ги обвинявам. Overcommit memory е много удобно оправдание защо не трябва да се пишат такива проверки и аз веднага го включвам в употреба :)
Тъй като гледам с gdb, вероятно някой друг в libc не проверява дали malloc връща 0. За което никак не ги обвинявам. Overcommit memory е много удобно оправдание защо не трябва да се пишат такива проверки и аз веднага го включвам в употреба :)
Re: проблем 2 сякаш изчезна, но Killed си е Killed
При мен на 2.4.26 и
# cat /proc/sys/vm/overcommit_memory
0
#
отпечатва null
# cat /proc/sys/vm/overcommit_memory
0
#
отпечатва null