Opened 4 years ago

Closed 4 years ago

#896 closed ожидается проверка (задача сдана)

WW #13

Reported by: Brilliantov Kirill Owned by: Sokolov Viacheslav
Component: WW_array Version: 3.0
Keywords: Cc:

Description


Change History (7)

comment:1 Changed 4 years ago by Sokolov Viacheslav

Type: ожидается проверкаожидаются исправления

33 constexpr static std::size_t SHRINKED_SIZE = (N + 1) / 8;
1) тут ошибка
2) может переполниться при большом N

58 void fill(bool val);

noexcept

61 char data_[SHRINKED_SIZE];

лучше unsigned char, потому что знаковый сдвиг может работать не так, как беззнаковый

сейчас не работает a[i] = a[i + 1] для bool - специализации. Напишите тест.

64 constexpr std::size_t shift = 3;
лучше внести внутрь класса, потому что это деталь его реазилации. Также лучше на этапе компиляции связать значения 3 и 8.

126 for (std::size_t i = 0; i < (N + 1) / 8; i++) {
127 data_[i] = val ? CHAR_MAX : 0;
128 }
здесь тоже ошибка. Ее можно было бы избежать с помощью range-based for.
Можно реализовать эффективнее с помощью memset.

функции из bits_utillity лучше сделать constexpr, это повысит эффективность кода. Сейчас потенциально программа работает существенно медленнее, чем могла бы, из-за того, что может не произойти inline этих простых функций.

28 std::size_t get_rem(std::size_t val, std::size_t pow2) {
29 return val & ((1 << pow2) - 1);
30 }

например, здесь компилятор мог бы все простить до val&7 в месте вызова, а без inline-а будет происходить вызов функции + подстановка 3 в pow2, расчет 1 << pow2, только после этого -1, только после этого & - куча лишних инструкций

6 bool bit_set_value(char* data, std::size_t index, bool val) {
7 bit_clear(data, index);
8 if (val)
9 bit_set(data, index);

10 return val;
11 }

if может быть медленнее, чем простые битовые операции

1ULL
почему ULL? я еще могу понять 1u (наверное, лучше все же static_cast<std::uint8_t>(1))

comment:2 Changed 4 years ago by Brilliantov Kirill

Type: ожидаются исправленияожидается проверка
Version: 1.02.0

comment:3 Changed 4 years ago by Sokolov Viacheslav

g++ -O2 -Wall -Werror -std=c++17 -Iinclude -g -c -MMD -o obj/smoke_compile.o src/smoke_compile.cpp
In file included from src/smoke_compile.cpp:1:
include/my_array.h:4:10: fatal error: bits_utillity.hpp: No such file or directory

4 | #include "bits_utillity.hpp"

|

compilation terminated.
Makefile:17: recipe for target 'obj/smoke_compile.o' failed
make: * [obj/smoke_compile.o] Error 1

comment:4 Changed 4 years ago by Sokolov Viacheslav

Type: ожидается проверкаожидаются исправления

comment:5 Changed 4 years ago by Brilliantov Kirill

Type: ожидаются исправленияожидается проверка
Version: 2.03.0

comment:6 Changed 4 years ago by Sokolov Viacheslav

╰─>$ make
mkdir -p obj
g++ -O2 -Wall -Werror -std=c++17 -Iinclude -g -c -MMD -o obj/smoke_compile.o src/smoke_compile.cpp
g++ -O2 -Wall -Werror -std=c++17 -Iinclude -g -c -MMD -o obj/main.o src/main.cpp
g++ obj/smoke_compile.o obj/main.o -o lab_13
obj/main.o: In function `main':
/home/nicesap/HSE/svn/brilliantov.kirill/lab_13/src/main.cpp:84: multiple definition of `main'
obj/smoke_compile.o:/home/nicesap/HSE/svn/brilliantov.kirill/lab_13/src/smoke_compile.cpp:97: first defined here
collect2: error: ld returned 1 exit status
Makefile:14: recipe for target 'lab_13' failed
make: * [lab_13] Error 1

comment:7 Changed 4 years ago by Sokolov Viacheslav

Resolution: задача сдана
Status: assignedclosed
Note: See TracTickets for help on using tickets.