ПредишенСледващото

За някои хардуерни платформи, има строги изисквания за привеждане в съответствие на данните. На някои системи, обикновено RISC, зареждане неправилно подредени данни води до генериране на система за прекъсване (капан), грешки, които могат да бъдат лекувани. На други системи с неестествено голяма степен отговаря на данните, можете да работите, но тя намалява proiz-

voditelnosti. Когато пишете преносим код е необходимо за предотвратяване на проблемите, свързани с привеждане в съответствие, както и всички видове данни трябва да има естествена подравняване.

Как да се избегнат проблеми с подравняване

Компилаторът обикновено предотвратява проблемите, свързани с подравняване, чрез физическо подреждане на всички типове данни. В действителност, разработчиците на ядрото обикновено не се налага да се справят с проблемите, свързани с привеждане в съответствие, това трябва да се грижи за разработчиците GCC компилатор. Въпреки това, все още могат да се появят такива проблеми, когато предприемачът да извършва операции с указатели и достъп до данни, без да се отчита компилаторът извършва операции за достъп до данни.

знак * р = куче [1];

неподписан дълго 1 = * (неподписан дълго *) р;

Ако мислите, че: "Защо трябва да бъде необходима", тогава най-вероятно сте прав, обаче, ако ние така направи точно това, нещо да се направи и някой друг, така че трябва да бъдете внимателни примери .. което се случи в реалния живот, а не непременно като очевидно.

Изравняване на нестандартни типове данни

• Подравняване масив е същото като трасето от първия тип на показателя за данни (всички други елементи, автоматично са подравнени правилно).

• Подравняване съюз (съюз) съответства на изравняване на най-голямата по размер, типа на данните от тези, които са включени в обединението.

• Привеждане на структурата съответства на привеждане в съответствие на най-голямата по размер, вида на данни между всички видове структурни области.

В структурите на различни пълнене методи (подложка) могат също така да бъдат използвани.

Структурите са пълни, така че всеки елемент има естествено подравняване. Да вземем например следната структура на данните 32razryadnoy колата.

овъгляване куче; / * 1 байт * / неподписан longcat; / * 4 байта * / неподписан shortpig; / * 2 байта * /

charfox; / * 1 байт * /

Тази структура на данните в паметта, не изглежда, че е свързано с необходимостта от естествен подравняване. В памет компилатор създава структура от данни, която е подобна на следното.

овъгляване куче; / * 1 байт * / U8 __pad0 [3]; / * 3 байта * / неподписан дълго котка; / * 4 байта * / неподписан кратко свине; / * 2 байта * /

овъгляване лисица; / * 1 байт * /

U8 padl; / * 1 байт * /

Променливи напълване въведени, за да се осигури естествено подреждане на всички структурни елементи. Първо попълнете променливата въвежда допълнителни разходи за съхранение, за да се постави кутия ва т на границата

Имайте предвид, че изразът sizeo е (foo_struct) се равнява на стойността на 12 за всеки един случай, на тази структура за по-голямата част от 32-битови хардуерни платформи. С компилатор автоматично добавя пълначни елементи за да се осигури необходимото привеждане в съответствие.

Често това е възможно, за да пренаредите структурата на областта, така че да се избегне необходимостта да се запълни. Това позволява правилно приведено в съответствие с получаване на данни, без да въвеждат допълнителни елементи и запълване, съответно, структурата на по-малък размер.

струк т животински струк т

неподписан дълго котка; / * 4 байта * / неподписан кратко свине; / * 2 байта * / Чар куче; / * 1 байт * /

овъгляване лисица; / * 1 байт * /

Тази структура на данни е с площ от 8 байта. Въпреки това, не винаги е възможност за преместване на компоненти и промени места структура структура дефиниция

обиколки. Например, ако структурата се доставя в рамките на стандарта, или вече се използва в съществуващия код, редът на полета не може да бъде променено. Понякога, по някаква причина, може да се наложи специална заповед на полетата на структурата, като например специален изравняване на променливи, за да се оптимизира кеш. Имайте предвид, че в съответствие със стандарта ANSI C компилатор никога не трябва да промените реда на полета в strukturah5 данни - това право има само един програмист.

Ядрото разработчиците трябва да вземат под внимание особеностите на попълване на обмена на структури от данни: прехвърлянето на структури по мрежа или директно спестяване на диск, поради необходимостта да се запълни може да бъде различна за различните хардуерни платформи. Това е една от причините, поради които в езика за програмиране на C не е структури сравнение на оператора. Памет, която се използва за попълване на структурите от данни може да съдържа случайна информация, което прави невъзможно байт по байт сравнение на структури. Разработчиците език, C програмиране с право, че не остави никакво решение на проблема на сравнителни структури по преценка на програмист, който може да създаде за сравнение на техните функции във всеки отделен случай, за да използвате функциите на строителството на бетонни конструкции.

Свързани статии

Подкрепете проекта - споделете линка, благодаря!