From 097fba114ab09c0e3b30e85c633d380f66f4f10c Mon Sep 17 00:00:00 2001 From: Angel Dimitriev Date: Fri, 19 Mar 2021 14:49:08 +0200 Subject: Update README.md --- Sem. 04/README.md | 96 ------------------------------------------------------- 1 file changed, 96 deletions(-) diff --git a/Sem. 04/README.md b/Sem. 04/README.md index cdb0ea4..3933611 100644 --- a/Sem. 04/README.md +++ b/Sem. 04/README.md @@ -99,102 +99,6 @@ int main() -# Структури и двоични файлове. -### Размер на структура: - ```c++ -#include -using namespace std; - -struct A -{ - int a; - int b; -}; - -int main() -{ - cout << sizeof(A) << endl; // 8 bytes (4 bytes for each int) - - return 0; -} - ``` - - Ето как изглежда структурата в паметта: - - - ![enter image description here](https://i.ibb.co/9yWmQjP/2.png) - -Пример за **естествено подравняване**: - - ```c++ -#include - -using namespace std; - -struct B -{ - char ch; - int a; -}; - -int main() -{ - cout << sizeof(B); // 8 byte-s - - return 0; -} - - ``` - В паметта нещата изглеждат така: - -![enter image description here](https://i.ibb.co/zJ5bLCw/pic1.png) - -### Подравняване -При представянето на обект (от някакъв тип) в паметта: - -- В паметта променливите са разположени **в същия ред**, в който са декларирани в структурата. - - Подравняването става по **големината на най-голямата примитивна член-променлива** на структурата - размерът на структурата трябва да се дели на размерзът на най-голямата променлива. - - *Неформално*: Всяка променлива трябва да е на байт (ако приемем, че байтовете имат индекс, започвайки от 0), който е **кратен на големината на променливата**. - - За постигане на най-компактно представяне полетата на структурата да се сортират по тяхната големина в низходящ ред - -### Пример за записване на обекти във файл. - ```c++ -#include -#include -using namespace std; - -struct Test -{ - char ch; - int a; -}; -int main() -{ - ofstream f("output.dat", ios::binary); - - if(!f.is_open()) - { - cout << "Error!" << endl; - return -1; - } - - Test arr[3] = {{'a', 400},{'b', 500},{'c', 600}}; - - f.write((const char*)&arr, sizeof(arr)); - - f.close(); - - return 0; -} - - ``` - -След изпълнението на програмата, файлът (**output.dat**) изглежда така: - -![Image of the binary file after running the code](https://i.ibb.co/0JthLd6/3-A978-D14-7-C7-A-4-ABD-8-B0-C-DA27-F6-E9-CD0-A.png "Binary file") - - ### Пример за записване на обекти, които съдържат динамично заделени данни, във файл. ```c++ -- cgit v1.3.1-23-gd82d