Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Другие темы раздела
C (СИ) Функция обращения массива Составьте функцию revarray, переставляющую элементы любого массива в обратном порядке. Функция должна быть объявлена как void revarray(void *base, unsigned long nel, unsigned long width) { ... } Здесь параметр base означает указатель на начало массива, nel – количество элементов в массиве, а width – размер каждого элемента массива в байтах. Проверка работоспособности функции... https://www.cyberforum.ru/ c-beginners/ thread1831158.html Умножение матриц: найти ошибку в вычислениях C (СИ)
Не понимаю в чем ошибка. учусь на указателях,поэтому обязательное выполнение задачи на них. #include<stdio.h> main() {int a,b,c,f,d,*i1,*j1,vn,nomer1,nomer2,buf1,buf2,*u,*i,*j,n,m,s,*k; printf("Vvedite razmern. massiva A \n"); scanf("%d%d",&n,&m); for(i=*a;i<*(a+n);i+=20) for(j=i;j<i+m;j++) scanf("%d",j);
C (СИ) Сформировать однонаправленный список со звеном-заголовком, удалить две следующие буквы после буквы "Т" Сформировать однонаправленный список из звеном-заголовком и вы- далиты две следующие буквы после буквы "Т". Вывести на печать оба списки. #include <stdio.h> #include <stdlib.h> #include <string.h> #define MES_LEN 200 //using namespace std; typedef struct inform https://www.cyberforum.ru/ c-beginners/ thread1830988.html C (СИ) Программа для удаления лишних пробелов, табуляций, строк в файле Здравствуйте. Помогите дополнить или изменить программу (на Си), которая удаляла бы лишние пробелы, табуляции и пустые строки в файле. Благодарю. #include <stdio.h> #include <stdlib.h> #include <ctype.h> int test_str(const char * s) { https://www.cyberforum.ru/ c-beginners/ thread1830962.html
Седловая точка в матрице C (СИ)
Элемент двумерного массива называется седловым, если он одновременно наибольший в своей строке и наименьший в своём столбце. Дан целочисленный двумерный массив, размер которого не превышает 10 × 10. Известно, что все элементы массива различны. Составьте программу saddlepoint.c, определяющую седловую точку в этом массиве. Программа должна считывать из стандартного потока ввода количество строк и...
C (СИ) Умножение матрицы на матрицу https://www.cyberforum.ru/ c-beginners/ thread1830935.html
Не понимаю в чем ошибка. учусь на указателях,поэтому обязательное выполнение задачи на них.
C (СИ) Определить наличие заданных символов в строке https://www.cyberforum.ru/ c-beginners/ thread1830851.html
Помогите составить программу, где нужно ввести строку. Если в этой строке есть символы "q'',''w'',''e'', то вывести на экран,что в строке есть символы "q'',''w'',''e'', а если нет то выввести, что нет этих символов.
C (СИ) Найти произведение нечетных цифр двух чисел m и n (Pascal -> C)
Перевести код с Pascal в C. Нужно найти произведение нечетных цифр двух чисел m и n.var n, s, t, m, v, c :integer; begin readln(n); readln(m); s := 1; v :=1; while n > 0 do begin t := n mod 10;
C (СИ) Вычислить значение выражения https://www.cyberforum.ru/ c-beginners/ thread1830831.html
Задача: Дано натуральное n и действительное a. Вычислить: 1/a + 1/a(a+1) + .... + 1/a(a+1)....(a+n) ; В общем учусь на первом курсе, знаний мало, написал что смог (все работает, считает правильно) Но преподша не приняла, говорит типо деление на 0 не учтено, хотя консоль выдает "inf", если в знаменателе 0 Сам код:
C (СИ) Создать игру "Русское Лото" Привет дорогие форумчане, прошу помочь с написанием программы на Си. Идея программы заключается в создание игры "Лото" . Есть код программы на С++. Не могли бы вы мне помочь его исправить на Си https://www.cyberforum.ru/ c-beginners/ thread1830810.html
Рекурсивное возведение в целую степень C (СИ)
Только начал разбираться с рекурсией, идет туго. Возведение в степень получилось примерно таким : #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <math.h> long double pow(long double denominator, int power); int main(void) {
C (СИ) Переставляя строки матрицы, расположить их по возрастанию сумм их положительных четных элементов Характеристикой строки целочисленной матрицы назовем сумму ее положительных четных элементов. Переставляя строки заданной матрицы, расположить их в соответствии с ростом характеристик. При поиске суммы выводит просто 1. #include "stdafx.h" #include <stdio.h> #include <conio.h> int _tmain() { int a, m,n, sum, mem,i,j; https://www.cyberforum.ru/ c-beginners/ thread1830752.html
863 / 451 / 89
Регистрация: 10.06.2014
Сообщений: 2,643
21.10.2016, 16:13  [ТС] 0

Выравнивание адреса памяти - C (СИ) - Ответ 9672146

21.10.2016, 16:13. Показов 20687. Ответов 47
Метки (Все метки)

Ответ

Убежденный,
Понял. Спасибо!

Как я понял, выравнивание сводится к следующему:
Если нужно переменную малого типа привести к переменной большего типа(например int к long), тогда результат занимает 4 байта а остальные 4 забиваются мусором, что бы сократить количество обращений процессором к памяти для считывания данных. Если этот процесс можно вычислить на этапе компиляции, то данную работу берет на себя компилятор. Если же дело происходит в рантайме, то разработчик сам должен заполнить оставшуюся часть памяти большего типа мусором что бы обеспечить выравнивание. Я правильно понимаю?

Если данные разных типов, находящиеся в одном непрерывном блоке памяти(например, в структуре) не соблюдают правильную последовательность определения типов, то данные заполняются компилятором с помощью мусора. То есть правильно писать struct {char a; char b; int n;} а не {char a; int b; char b;}. Но почему так происходит я не понимаю. Можете кто нибудь объяснить?
По идее оба char-a должны быть забиты до 4 байта (1 байт сам char и 3 байта мусора) на 32 битных системах, а на 64 битных должно быть 7 байт мусора на каждый char в структуре?

Добавлено через 8 минут
Именно не понятно почему тут http://rextester.com/WLM62012 24 байта. Тут http://rextester.com/UKWSN11327 понимаю почему 16 байтов, по 4 байта выровненные char-ы и 8 long.

Вернуться к обсуждению:
Выравнивание адреса памяти C (СИ)
0
Заказать работу у эксперта
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.10.2016, 16:13
Готовые ответы и решения:

Выделить в памяти 1024 ячейки по 8 байт и вывести их адреса(МИНИ менеджер памяти))
Вот тут появилась такая интересная задача: требуется сделать программу которая управляет 1024...

Записать дополнительный код содержимого 16 ячеек памяти, начиная с адреса 910. Результаты занести в ячейки памяти, н
Записать дополнительный код содержимого 16 ячеек памяти, начиная с адреса 910. Результаты занести в...

Выравнивание памяти под 16
Hello, всем привет! Хочу выровнять массив НОРМАЛЬНО, чтобы вместо movups юзать movaps, что в...

Выравнивание памяти в stm32
Соственно сабж Нигде не найду как организована память. В документации по этому поводу нашел...

47
21.10.2016, 16:13
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.10.2016, 16:13
Помогаю со студенческими работами здесь

Выравнивание сегмента памяти
Дано задание:Захватить один кусок памяти размером N Кбайт. Заполнить его нулями. Захватить другой...

Выравнивание памяти и скорость работы.
Есть ли преимущество использования переменных длинной в 4 байта в 32 битных процессорах ARM в...

Адреса памяти
Здравствуйте, столкнулся с проблемой. Не могу понять, каким образом находятся адреса памяти...

Узнать адреса памяти
Всем привет! Не знал в какой теме разместить, разместил тут. Как узнать адреса памяти? Тоесть...

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru