Форум программистов, компьютерный форум, киберфорум
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
875 / 461 / 91
Регистрация: 10.06.2014
Сообщений: 2,669
0

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

21.10.2016, 14:48. Показов 20839. Ответов 47
Метки (Все метки)

Author24 — интернет-сервис помощи студентам
Прочитал на разных ресурсах про выравнивание адреса данных, но многое ещё не понятно.

Чего я понял:
Выравнивание адреса нужно для того что бы снизить количество обращений процессором к памяти для считывания хранимых данных
Чем больше объем данных адрес которых нуждается в выравнивании, тем больше усилий процессор прилагает что бы получить данные по невыровненному адресу
Не все процессоры умеют выравнивать адрес памяти самостоятельно

Чего я не понял:
Увидел следующее утчерждение: Адрес данных должен быть кратен размеру считываемых данных. Как программист может повлиять на кратность адреса, если выделением адреса данных занимается компилятор и этот процесс насколько понимаю выходит за пределы программного кода?
Некоторые компиляторы сами занимаются выравниванием адресов(дополняя данные адреса нулями) что бы можно было считать блок данных за минимальное количество обращений процессором к памяти. Именно не понятно, зачем забивать данные нулями

Прошу помочь разобраться

Добавлено через 17 минут
И ещё не ясно что приводит к "кривости" памяти которую потом приходится выравнивать

Добавлено через 52 минуты
Пока бродил по инету, нашел пример где структура с одинаковыми полями занимает разный объем в памяти в зависимости от последовательности типов в структуре.
Это тоже как то связано с выравниванием данных?
http://rextester.com/WLM62012 24 байта
http://rextester.com/UKWSN11327 16 байта

Добавлено через 11 минут
Кажется начал понимать почему заполняются нулями данные. Похоже дело в том, что каждый процессор может прочитать только определенное количество данных за одно обращение к памяти. Допустим, это число равно 4. Когда процессор читает char, нельзя позволить что бы он прочитал 1 байт который относится к char и 3 байта от других данных. Поэтому к char будут добавлены нули, что бы свести общий размер данных к 4. Если это так, то почему char a = 'b'; printf("%zu", sizeof(a)); равно 1, а не 4? В то время как внутри структуры из примера выше заполнение нулями есть(это определил потому что размер структуры превышает тот размер которого достаточно для хранения его данных)

Добавлено через 13 минут
Цитата Сообщение от sys_beginner Посмотреть сообщение
то время как внутри структуры из примера выше заполнение нулями есть
Выходит о выравнивании данных нужно заботиться только в том случае, когда в непрерывной области памяти находятся данные разных типов? Как например структуры, или массив функций которые возвращают значения разного типа? (Массив функций возвращаемое значение которых есть указатель на void*)

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

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

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

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

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

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

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

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

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

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

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