по данной вами же ссылке написано
Первоначальный формат для сохранения объектов в Git называется «рыхлым» форматом (loose format). Однако, время от времени Git упаковывает несколько таких объектов в один pack-файл для сохранения места на диске и повышения эффективности.
это больше исключение
Гит хранит разницу состояний между коммитами – diff.
любой доступ к памяти, нужно в любом случае, обратится к tlb
в любом случае, это вызов функции с передачей параметров, и разбор адреса на n кусков, пара проверок.
-d in_asm, op_opt,out_asmmovb (%rbx), %al
jmp 1f
1:IN:
0x001000ee: 8a 03 movb (%rbx), %al
0x001000f0: eb 00 jmp 0x1000f2
OP after optimization and liveness analysis:
ld_i32 tmp11,env,$0xfffffffffffffff0 dead: 1 pref=0xffff
movi_i32 tmp12,$0x0 pref=0xffff
brcond_i32 tmp11,tmp12,lt,$L0 dead: 0 1
---- 00000000001000ee 0000000000000000
qemu_ld_i64 tmp0,rbx,ub,2 dead: 1 pref=0xf
deposit_i64 rax,rax,tmp0,$0x0,$0x8 sync: 0 dead: 0 1 2 pref=0xffff
---- 00000000001000f0 0000000000000000
goto_tb $0x0
movi_i64 tmp3,$0x1000f2 pref=0xffff
st_i64 tmp3,env,$0x80 dead: 0 1
exit_tb $0x7f02d017d480
set_label $L0
exit_tb $0x7f02d017d483
OUT: [size=152]
-- guest addr 0x00000000001000ee + tb prologue
0x7f02d017d540: 8b 5d f0 movl -0x10(%rbp), %ebx
0x7f02d017d543: 85 db testl %ebx, %ebx
0x7f02d017d545: 0f 8c 58 00 00 00 jl 0x7f02d017d5a3
0x7f02d017d54b: 48 8b 5d 18 movq 0x18(%rbp), %rbx
0x7f02d017d54f: 48 8b fb movq %rbx, %rdi
0x7f02d017d552: 48 c1 ef 07 shrq $7, %rdi
0x7f02d017d556: 48 23 7d e0 andq -0x20(%rbp), %rdi
0x7f02d017d55a: 48 03 7d e8 addq -0x18(%rbp), %rdi
0x7f02d017d55e: 48 8b f3 movq %rbx, %rsi
0x7f02d017d561: 48 81 e6 00 f0 ff ff andq $0xfffffffffffff000, %rsi
0x7f02d017d568: 48 3b 37 cmpq (%rdi), %rsi
0x7f02d017d56b: 48 8b f3 movq %rbx, %rsi
0x7f02d017d56e: 0f 85 3b 00 00 00 jne 0x7f02d017d5af
0x7f02d017d574: 48 03 77 18 addq 0x18(%rdi), %rsi
0x7f02d017d578: 0f b6 1e movzbl (%rsi), %ebx
0x7f02d017d57b: 48 8b 4d 00 movq (%rbp), %rcx
0x7f02d017d57f: 88 d9 movb %bl, %cl
0x7f02d017d581: 48 89 4d 00 movq %rcx, (%rbp)
-- guest addr 0x00000000001000f0
0x7f02d017d585: 66 90 nop
0x7f02d017d587: e9 00 00 00 00 jmp 0x7f02d017d58c
0x7f02d017d58c: 48 c7 85 80 00 00 00 f2 movq $0x1000f2, 0x80(%rbp)
0x7f02d017d594: 00 10 00
0x7f02d017d597: 48 8d 05 e2 fe ff ff leaq -0x11e(%rip), %rax
0x7f02d017d59e: e9 75 2a e8 ff jmp 0x7f02d0000018
0x7f02d017d5a3: 48 8d 05 d9 fe ff ff leaq -0x127(%rip), %rax
0x7f02d017d5aa: e9 69 2a e8 ff jmp 0x7f02d0000018
-- tb slow paths + alignment
0x7f02d017d5af: 48 8b fd movq %rbp, %rdi
0x7f02d017d5b2: ba 02 00 00 00 movl $2, %edx
0x7f02d017d5b7: 48 8d 0d bd ff ff ff leaq -0x43(%rip), %rcx
0x7f02d017d5be: ff 15 0c 00 00 00 callq *0xc(%rip)
0x7f02d017d5c4: 8b d8 movl %eax, %ebx
0x7f02d017d5c6: e9 b0 ff ff ff jmp 0x7f02d017d57b
0x7f02d017d5cb: 90 nop
0x7f02d017d5cc: 90 nop
0x7f02d017d5cd: 90 nop
0x7f02d017d5ce: 90 nop
0x7f02d017d5cf: 90 nop
data: [size=8]
0x7f02d017d5d0: .quad 0x000055895af47e50Загрузка регистра %rbx виртуального процессора в %rbx:
0x7f02d017d54b: 48 8b 5d 18 movq 0x18(%rbp), %rbx
Вычисление адреса записи в TLB QEMU для виртуального адреса в %rbx:
0x7f02d017d54f: 48 8b fb movq %rbx, %rdi
0x7f02d017d552: 48 c1 ef 07 shrq $7, %rdi
0x7f02d017d556: 48 23 7d e0 andq -0x20(%rbp), %rdi
0x7f02d017d55a: 48 03 7d e8 addq -0x18(%rbp), %rdi
Выделение адреса страницы из виртуального адреса в %rbx:
0x7f02d017d55e: 48 8b f3 movq %rbx, %rsi
0x7f02d017d561: 48 81 e6 00 f0 ff ff andq $0xfffffffffffff000, %rsi
Сравнение адреса страницы и виртуального адреса адреса в TLB
0x7f02d017d568: 48 3b 37 cmpq (%rdi), %rsi
Если не сходится -- перейти к вызову обработчика эмуляции TLB процессора:
0x7f02d017d56b: 48 8b f3 movq %rbx, %rsi
0x7f02d017d56e: 0f 85 3b 00 00 00 jne 0x7f02d017d5af
Иначе (сошлось) -- вычислить "физический" адрес по виртуальному:
0x7f02d017d574: 48 03 77 18 addq 0x18(%rdi), %rsi
Загрузить байт из памяти:
0x7f02d017d578: 0f b6 1e movzbl (%rsi), %ebx
Записать загруженный байт в регистр виртуального процессора %al:
0x7f02d017d57b: 48 8b 4d 00 movq (%rbp), %rcx
0x7f02d017d57f: 88 d9 movb %bl, %cl
0x7f02d017d581: 48 89 4d 00 movq %rcx, (%rbp)Или есть какие обходы, когда игнорится трансляция, как будто в реальном режиме.
Или вот чтение инструкции из EIP, каждое чтение по адресу, прочесть инструкцию PC+1 будет перед тем как исполнить, на фазе извлечения опять это делать?
Был когда-то такой антиотладочный трюк в x86, когда инструкция перезаписывала следующую прямо за ней. При реальном исполнении следующая инструкция была бы уже в кэше, и перезапись не дала бы эффекта.
Проблема в том, что при проверке через обычный if и else выдаётся "Не удалось открыть файл".
if ((f = fopen(path, "ab+"); { printf ("Не удалось открыть файл"); }
проверка, конечно, устраняет появление ошибки, однако никак не решает проблему с вводом данных
в Makefile тупо прописана команда "gcc"?
обработка, видимо, зашита в стандартной библиотеке
stty -icanon -isig можно полностью отключить интерпретацию ^C/^D/^Z/…ENABLE_PROCESSED_INPUT в описании которого есть упоминание ^C и "других управляющих символов", но не написано, входит ли туда ^Z. Если во втором случае MSVC возвращает EOF, но заполняет — поведение некузявое, но допустимое.
The fscanf function returns the value of the macro EOF if an input failure occurs before any conversion. Otherwise, the function returns the number of input items assigned
сколько тогда нужно выделять под возможный EOF места?
getchar возвращает int
getchar сравнивается с EOF, его надо хранить в переменной типа int.И получается "c" нужно инициализировать явно, то есть:
char c[32]="_\0"
, где _ —любой символ, а 32 байта нужно для предотвращения проблем с EOF
?
char c1[2] = {c, 0};
strcat(word, c1);
Vitsliputsli, слушай, ну с чем ты споришь, если можно просто взять и убедиться, что по умолчанию хранятся?:
Вот подопытный файл размером почти 8M.
Вот файл блоба с его первоначальным состоянием размером 4М.
Вот к нему добавилась одна строчка
Вот ещё один файл блоба, из нового коммита, с добавленной одной строчкой, почти такого же размера -- 4M.
В эту игру можно играть целый день:
100 коммитов с блобами по 4М, а каждый коммит только по одной строчке в конец добавил.