Головна Обговорення Лінки Пошук Prykladna СС Прикладна _КОЛЕДЖ 29.03.2024 15:18:36 (EEST=GMT+2)
ACM -
Навігація -
Теми форуму +
Чи знали ви, що... ? (beta) -
У 2000 р. Міжнародна гідрографічна організація прийняла розділення на п'ять океанів, виділивши Південний океан з складу Атлантичного, Індійського і Тихого.
Події
ПнВтСрЧтПтСбНд
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

Birthday(s):
AVATARbbodio
AVATARklichuk
AVATARGrudik
AVATARKiraSvetlova

Перегляд теми
ACM Контестер | Технічні Питання | Тестувалка
Автор Strange compilation
Latobco
Користувач

Аватар користувача

Повідомлень: 9
Звідки: LNU
Зареєстрований: 18.04.08
Опубліковано 20-05-2011 14:59
Я дуже прошу мені пояснити одну річ, яку я, можливо, не до кінця розумію, або в іншому випадку у вас є бага противна.
Ну, неварто дивитись, як я задав космозаправки 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
444661924 Надіслати приватне повідомлення
Автор RE: Strange compilation
Latobco
Користувач

Аватар користувача

Повідомлень: 9
Звідки: LNU
Зареєстрований: 18.04.08
Опубліковано 20-05-2011 15:52
Невелике дослідження на моїй машині

taras@linux-vtdz:~> cat > atest.cpp
#include <stdio.h>
int main()
{
int a, b, k;
scanf("%d %d %d", &a, &b, &k);
printf( "2" );
return 0;
}
taras@linux-vtdz:~> g++ --version
g++ (SUSE Linux) 4.5.0 20100604 [gcc-4_5-branch revision 160292]
taras@linux-vtdz:~> g++ -o atest atest.cpp
taras@linux-vtdz:~> ./atest
1 1 1
2
taras@linux-vtdz:~> ls -lh | grep atest
-rwxr-xr-x 1 taras users 9.8K 2011-05-20 15:03 atest
-rw-r--r-- 1 taras users 102 2011-05-20 15:03 atest.cpp

Я думаю, що в передостанньому рядку видно таки, що на диску прога займає 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
444661924 Надіслати приватне повідомлення
Автор RE: Strange compilation
webmaster
Головний Адміністратор

Аватар користувача

Повідомлень: 1135
Зареєстрований: 17.03.07
Опубліковано 22-05-2011 14:21
Та то Ви дивитесь під Лінуксом, а у нас Вінад, хоча ні, така відповідь не підходить, Ви вже її передбачили
:)
Ну що скажу, так вже воно рахує то.
Раніше пам'ятаю, "пуста" програма на С++ займала порядку до 1мб пам'яті, тепер після переїзду на іншу ОС виходить 1,4мб. Цього я був не помітив. Піду подивлюсь, що вона там робить на сервері, може з тим краще розберусь.
Дякую, за допомогу.
brus07 brus07 (Lviv NU) http://acm.lviv.ua Надіслати приватне повідомлення
Перейти на форум:
Голосування
Що Ви б хотіли отримати в якості подарунку на змаганні з програмування?

Медалі

настільні ігри

торт

клавіатура, навушники, флешки і т.д.

квитки в кіно

квитки в аквапарк

квитки на пейнтбол

книги

футболки з логотипом змагання

Для участі в голосуваннях Ви повинні залогуватись.
Міні-чат +
Зараз на сайті -
Гостей: 3
На сайті немає зареєстрованних користувачів

Користувачів: 5,091
новачок: dasha_sha
Powered by PHP-Fusion © 2003-2006
LNU ACMania © 2004-2011 e-mail: webmaster@acm.lviv.ua
23,445,645 унікальних відвідувачів
Our projects: ACM Contester, _College.
  пїЅпїЅпїЅпїЅпїЅпїЅпїЅ Orphus     bigmir)net TOP 100