что противоречит тому, что файл уменьшился на удаленные с его начала несколько байт
загляните отладчиком в код функции new.
Dump of assembler code for function _Znwm:
0x00007ffff7ae6790 <+0>: push %rbx
=> 0x00007ffff7ae6791 <+1>: test %rdi,%rdi
0x00007ffff7ae6794 <+4>: mov %rdi,%rbx
0x00007ffff7ae6797 <+7>: mov $0x1,%eax
0x00007ffff7ae679c <+12>: cmove %rax,%rbx
0x00007ffff7ae67a0 <+16>: mov %rbx,%rdi
0x00007ffff7ae67a3 <+19>: callq 0x7ffff7adff10 <malloc@plt>
0x00007ffff7ae67a8 <+24>: test %rax,%rax
0x00007ffff7ae67ab <+27>: je 0x7ffff7ae67b0 <_Znwm+32>
0x00007ffff7ae67ad <+29>: pop %rbx
0x00007ffff7ae67ae <+30>: retq
0x00007ffff7ae67af <+31>: nop
0x00007ffff7ae67b0 <+32>: callq 0x7ffff7adff60 <_ZSt15get_new_handlerv@plt>
0x00007ffff7ae67b5 <+37>: test %rax,%rax
0x00007ffff7ae67b8 <+40>: je 0x7ffff7ae67be <_Znwm+46>
0x00007ffff7ae67ba <+42>: callq *%rax
0x00007ffff7ae67bc <+44>: jmp 0x7ffff7ae67a0 <_Znwm+16>
0x00007ffff7ae67be <+46>: mov $0x8,%edi
0x00007ffff7ae67c3 <+51>: callq 0x7ffff7ae0840 <__cxa_allocate_exception@plt>
0x00007ffff7ae67c8 <+56>: mov 0x2ebec1(%rip),%rdx # 0x7ffff7dd2690
0x00007ffff7ae67cf <+63>: mov 0x2eb9e2(%rip),%rsi # 0x7ffff7dd21b8
0x00007ffff7ae67d6 <+70>: mov %rax,%rdi
0x00007ffff7ae67d9 <+73>: add $0x10,%rdx
0x00007ffff7ae67dd <+77>: mov %rdx,(%rax)
0x00007ffff7ae67e0 <+80>: mov 0x2ec681(%rip),%rdx # 0x7ffff7dd2e68
0x00007ffff7ae67e7 <+87>: callq 0x7ffff7ae0db0 <__cxa_throw@plt>
End of assembler dump.
mlock() гарантирует, что выделенная память не будет спейджирована операционной системой, и указатель будет валидным во время выполнения программы.
нужно помнить, что tmpfs не ограничен
Mount options for tmpfs
size=nbytes
Override default maximum size of the filesystem.
The size is given in bytes, and rounded up to entire pages.
The default is half of the memory.
The size parameter also accepts a suffix % to limit this tmpfs instance
to that percentage of your physical RAM: the default, when neither
size nor nr_blocks is specified, is size=50%
В вашей функции последние три строки выполняются всегда, вне зависимости от длины массива.
вы присваиваете переменной N ноль внутри функции main. А потом нигде не меняете его.
а почему в writem не нужно было ставить &? там же тоже не возвращается значение
aarch64-linux-gnu-gcc: error: unrecognized argument in option ‘-mabi=apcs-gnu’
CROSS_COMPILE=/tmp/toster/gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-
.там следующая строка
А чего он от меня хочет то?
-oKexAlgorithms=... -oHostKeyAlgorithms=...
. Я бы начал методом тыка с -oKexAlgorithms=diffie-hellman-group1-sha1 -oHostKeyAlgorithms=ssh-dss
. /home/maks/OTG/compx/aarch64-linux-gnu/bingcc
-- это что, просто путь куда ты компилятор распаковал? CROSS_COMPILE у тебя как установлен? Должно быть что-то типа /home/maks/OTG/compx/aarch64-linux-gnu/bingcc/bin/aarch64-linux-gnu-
, т.е. полный путь к компилятору без последнего "gcc".
vanyamba-electronics Бесполезно гадать -- надо отлаживать.
Поменял условия и проблема переползла в другое место. Не нужно рассчитывать на магию mlock или чего-то ещё, магии нет.
Лучше добавить -fsanitize=address и др. в опции сборки или запускать под valgrind'ом.