У 2000 р. Міжнародна гідрографічна організація прийняла розділення на п'ять океанів, виділивши Південний океан з складу Атлантичного, Індійського і Тихого.
Я дуже прошу мені пояснити одну річ, яку я, можливо, не до кінця розумію, або в іншому випадку у вас є бага противна.
Ну, неварто дивитись, як я задав космозаправки 1022 - тупив досить (вже знаю, в чому я затупив), але не в тому суть - суть в здачі самої задачі. Вибиває в мене Memory Limit на першому тесті, коли я оголосив масив інтів на мільйон, хоча обмеження по пам'яті - 5000K. Думаю, що за біда..
В результаті я зменшив програму до вигляду
#include <stdio.h>
int main()
{
int a, b, k;
scanf("%d %d %d", &a, &b, &k);
printf("2" );
return 0;
}
щоб проходила перший тест - і дивився по пам'яті.
Така скомпільована програма займає (принаймні, так, як у вас написано) 1432 Кб, себто більше 1МБ в пам'яті.
І хто це може по-людськи пояснити?
Або виправити! Не знаю, це бага при обрахунку самої пам'яті, чи у вас якісь тупі опції при компіляції... upd Трохи сам то пробував пояснити.. див. нижче
Змінив(ла) Latobco, 20-05-2011 16:10
Я думаю, що в передостанньому рядку видно таки, що на диску прога займає 9.8K. Запускаєм з профайлером
valgrind -v ./atest
все чисто, жодних memory leaks нема
Дивимось дуже детальну статистику
Для цього шукаю PID
taras@linux-vtdz:~> ps ax | grep atest
19804 pts/3 S+ 0:00 ./atest
19806 pts/6 S+ 0:00 grep atest
власне статистика
taras@linux-vtdz:~> cat /proc/19804/smaps
тут багато всякого шунта, з якого важливі є кілька речей
08049000-0804a000 r-xp 00000000 08:07 144505 /home/taras/atest
Size: 4 kB
Rss: 4 kB
Pss: 4 kB
Shared_Clean: 0 kB
Shared_Dirty: 0 kB
Private_Clean: 0 kB
Private_Dirty: 4 kB
Referenced: 4 kB
Anonymous: 4 kB
Swap: 0 kB
KernelPageSize: 4 kB
MMUPageSize: 4 kB
Ото звичайна статистика програми (подібних купа - програма майже весь час займає 4-8 Kб)
А ото при зверненні до лібок: (scanf) (фактично пам'ять самої підгруженої лібки)
b7606000-b776a000 r-xp 00000000 08:06 524872 /lib/libc-2.11.2.so
Size: 1424 kB
Rss: 180 kB
Pss: 1 kB
Shared_Clean: 180 kB
Shared_Dirty: 0 kB
Private_Clean: 0 kB
Private_Dirty: 0 kB
Referenced: 180 kB
Anonymous: 0 kB
Swap: 0 kB
KernelPageSize: 4 kB
MMUPageSize: 4 kB
От що я вам скажу. Ви неправильно рахуєте пам'ять, що займає програма.
Ви рахуєте пам'ять ту, яка ЗАРЕЗЕРВОВАНА для програми, а не ту, яку вона ФІЗИЧНО займає в пам'яті (тіки не треба казати, що я так порахував, бо дивився під лінуксом - під віндою все майже так само). Був би радий, якби ви щось з цим зробили.
P.S. Я надіюсь, ви розумієте, що ця дискусія не через те, що я не зміг там здати задачку (купа людей її нормально здали), а тому, що мене зацікавило, чому так все відбувається.
Змінив(ла) Latobco, 20-05-2011 16:09
Та то Ви дивитесь під Лінуксом, а у нас Вінад, хоча ні, така відповідь не підходить, Ви вже її передбачили
Ну що скажу, так вже воно рахує то.
Раніше пам'ятаю, "пуста" програма на С++ займала порядку до 1мб пам'яті, тепер після переїзду на іншу ОС виходить 1,4мб. Цього я був не помітив. Піду подивлюсь, що вона там робить на сервері, може з тим краще розберусь.
Дякую, за допомогу.