Собственно сабж нужно определить уровень программирования(Школьник,Студент,Программист)(опр еделение по уровню задачи, уровеню реализации).Сам код вложен в тхт.
Задание------------------
- Разработать программу, демонстрирующую метод учета состояния оперативной памяти с помощью битовой карты.
1 – ресурс занят, 0 – ресурс свободен.
Битовые карты использовались некоторыми ОС для учета свободных и занятых фрагментов памяти.
Одна единица 8 байт.Всего 1024 байта
--------------------------
Изображения
студен, паскалевский стиль объявления всех переменных в самом начале, нечитабельный код. человек переходил с паскаля на Си, это не С++.
вверху указано использование std но не используется он, код сложно олаживать и вносить в него изменения другому программисту.
переменные не проинициализированы при создании.
код неустойчив. легко можно входными данными потереть чужую память.
код неоптимизирован ( над этим похоже не заморачивались даже )
пример оптимизации:
static inline int ShapingNumber( int const n )
{
return ( 1 << ( n + 1 ) ) - 1;
}
на испытательный срок брать можно т.к. есть хотябы желание программировать. если конечно нет того кто пишет более понятный код.
в коде имного неименованых констант, например '32' и '4' это осложнит внесение изменений в код.
спс..на испытательный срок рано..вопрос возник так как учитель гврит пишу как школьник..
[Ответ]
Pengvin 23:02 18.03.2008
кстати комментов мало в коде вобще тяжело разобраться, но расставлены отступы, код впринципе читабелен, видали и похуже . я так примерно глянул этот код просто с массивом в памяти работает, если поиграться с циферками в функции Size, то можно получить паямти больше 512байт.
кстати может более опытные программеры меня поправят, но размер доступной памяти под Win32 можно определить например вот так:
#include <stdio.h>
#include <windows.h>
unsigned int mem=2147483648; // максимальный размер памяти для процессов в винде 32битной 2Гб
int main() {
unsigned char *MAP=0;
while ((MAP==NULL) && (mem>0)) //пока не выделим память или не достигнем минимума выделяемой памяти
{
MAP=(unsigned char *)VirtualAlloc(NULL,mem,MEM_COMMIT,PAGE_READWRITE) ; //пробуем выделить память
mem-=4096; //уменьшаем кол-во выделяемой памяти на 4кб ,т.е. на размер страницы
}
printf("Memmory allocated %d MB \n",mem/(1024*1024));
VirtualFree (MAP,mem,MEM_RELEASE); //освобождаем выделенную память
}
у меня получает 1452 мб памяти . остальной код работы с массивом неизменным остается, только пересчитать значение счетчиков в циклах.
ЗЫ: у кого 64битная винда, скомпилируйте 64битное приложение и попробуйте выделить больше 2гб.
[Ответ]
liness 23:09 18.03.2008
Сообщение от :
- нечитабельный код
- переменные не проинициализированы при создании
можно чуть по подробней?
Сообщение от :
- паскалевский стиль объявления всех переменных в самом начале-
хм стиль объявления переменных в самом начале не такой уж и порочный, один раз я писал 16битный код на turbo C, так он не позволял объявлять переменные в любом месте кода, приходилось в начало программы/функции выносить.
[Ответ]
liness 23:15 18.03.2008
тоесть я понял желательно объявлять внутри кода если есть возможноть
[Ответ]
The_God 23:22 18.03.2008
Сообщение от liness:
- нечитабельный код
про вариант оформления кода ( лично у меня свой стиль, просто его описывать не хочу щас ), стиль можено придумать любой, нужно чтобы он был и не менялся. http://rsdn.ru/article/mag/200401/codestyle.XML
Сообщение от liness:
переменные не проинициализированы при создании
нужно int t = 0;
а лучше описывать переменные там где они нужны и больше уникальных имён которые объясняют назанчение переменной, не нужно создавть TempVar1, TempVar2 и т.п.
[Ответ]