0 / 0 / 0
Регистрация: 24.11.2012
Сообщений: 111
1

Распределение оперативной памяти выделенной под программу

14.01.2013, 23:43. Показов 1913. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте.
Помогите с объяснением некоторых тем, нигде не могу найти.
№1 Целый тип данных. Даже не знаю, о чем там можно рассказывать(об int, char и о чем еще?).
№2 Ввод/вывод данных с консоли(т.е. рассказать про scanf и printf?).
№3 Распределение оперативной памяти выделенной под программу.
№4 Указатель на указатель.
№5. Структура одномодульной программы с испоьзованием функций.

Выложите, пожалуйста, полезные ссылки на эти темы(может я их пропустил) или объясните сами.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.01.2013, 23:43
Ответы с готовыми решениями:

Распределение памяти для выделения и освобождения блоков памяти внутри запрошенного пула
В программе малые"дыры" избегают,что нужно сделать что бы малые "дыры" не избегались.... #...

Как обратится к оперативной памяти, выделенной под указаный процес
Ребята подскажите пожалуйста, как обратится к оперативной памяти, выделенной под указаный процес....

Распределение оперативной памяти.
На языке си нужно написать программу демонстрирующая распределение памяти. Программа должна в...

Распределение оперативной памяти для виртуальных машин
В общем дело такое. Есть сервер, оперативы на нём 128 гигов. Планирую поставить Windows 2008 R2,...

7
387 / 214 / 102
Регистрация: 09.04.2012
Сообщений: 635
15.01.2013, 08:13 2
В №1 вопросе можно описать как целые типы связаны с битовыми структурами. char занимает 8 бит, в знаковом типе один из битов описывает знак, оставшиеся число, в беззнаковом типе все биты описывают число. short int занимает 16 бит. int 32 бита (MS VC) long 64 бита (MS VC)

1.2.2 - Nibbles 1.2.3 - Bytes 1.2.4 - Words 1.2.5 - Double Words по ссылке: http://cs.smith.edu/~thiebaut/... ofasm.html Если не понимаете английский, там есть полезные рсиунки.

Во №2 вопросе можно еще рассказать про другие функции, определенные в stdio.h : getchar, putchar, gets, puts. Нужно раскрыть понятия stdin и stdout. Консольный ввод осуществляется от устройства ввода, а им может быть физическое устройства ( железо), файловая система и др. Вывод может осуществляться на устройство, открываемое как файл, и в файл.
В unix/linux системах возможно переназначение вывода через трубки ( pipe) в другие программы.

Прототипы:
C
1
2
3
4
int getchar ( void );
int putchar ( int character );
int puts ( const char * str );
char * gets ( char * str );
Unix pipes: http://www.cse.ohio-state.edu/... notes.html

№3
Структура скомпилированного исполняемого файла описывает, как программа и ее данные будут помещаться в памяти. Каждый процесс имеет виртуальное пространство. Часть этого пространства занимает код ( секция .text исполняемого файла COFF), константы ( .rdata), переменные(секция .data) и т.д. На сайте wasm.ru есть подробная информация про Portable Executable формат. Если же программе нужна память в процессе выполнения, то она выделяется с помощью функции malloc из кучи (heap).
ru.wikipedia.org/wiki/Куча_(память)
ru.wikipedia.org/wiki/Portable_Executable

№4
Указатель на указатель содержит адрес указателя. Это позволяет описывать матричные структуры данных.

№5
Структура примерно следующая:
Включение заголовочных файлов.
Объявление типов данных: typedef, struct, union.
Объявление констант и макросов с помощью #define.
Глобальные переменные.
Прототипы функций. (или полные объявления функций, содержащие тела)
Функция main - точка входа в программу ( адрес инструкции для стека вызовов)
Тело функций
1
0 / 0 / 0
Регистрация: 24.11.2012
Сообщений: 111
15.01.2013, 14:37  [ТС] 3
а можно поподробнее об указателе на указатель
0
101 / 92 / 53
Регистрация: 22.03.2011
Сообщений: 226
15.01.2013, 14:49 4
Цитата Сообщение от ДЖАГЕРНАУТ Посмотреть сообщение
а можно поподробнее об указателе на указатель
В этом топике меня спросили:

Так-же не ясно что такое когда этих указателя два (**). Такого у нас ещё не было, хотя я уже использовал нагло списав откуда-то. Как это дело хоть называется? 2) Что значит амперсант (&head)?
И там я попытался объяснить.
0
387 / 214 / 102
Регистрация: 09.04.2012
Сообщений: 635
15.01.2013, 15:23 5
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

На примерах.

Если есть переменная a.
C
1
2
3
4
5
6
7
8
9
int a;
a = 5;
int *b; //указатель на переменную
b = &a; // заносим в указатель адрес переменной a
*b = 6; // эквивалентно a=6
b++;b--; // изменение адреса указателя
int** c; // указатель на указатель
c = &b; // получение адреса указателя
**c = 8; // эквивалентно a=8; или *b = 8;
Другой вариант это создание матрицы с помощью указателя на указатель
например
C
1
2
3
4
5
int i;
int** m;
m = (int**) malloc( n*sizeof(int*));
for(i=0;i<n;i++)
m[i] = (int*) malloc(n*sizeof(int));
Добавлено через 20 минут
Вот пример, показывающий, что двумерный массив является указателем на указатель.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
 
void print(int** k, int s1, int s2)
{
 int i = s1*s2;
 while (i>0)
 {
  printf("%d \n", *(k++));
  i--;
 }
}
 
int main()
{
int a[2][4]; //двумерный массив
 
a[0][0]=1; a[0][1]=2; a[0][2]=3;a[0][3]=4;
a[1][0]=3; a[1][1]=4; a[1][2]=5;a[1][3]=6;
print(a, 2, 4);
return 0;
}
0
0 / 0 / 0
Регистрация: 24.11.2012
Сообщений: 111
15.01.2013, 17:00  [ТС] 6
можете еще ответить на несколько вопросов:
  1. вычисления ряда с помощью рекуррентного выражения(зачем нужны, алгоритм вычисления).
  2. алгоритмы сортировок методом вставки, сравнения, выбором.
  3. способы обмена данными между функциями, правило соответствия формальных и фактических параметров.
0
387 / 214 / 102
Регистрация: 09.04.2012
Сообщений: 635
15.01.2013, 18:36 7
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Разложение в ряд Тейлора позволяет получить значение функции.
https://www.cyberforum.ru/cgi-bin/latex.cgi?\sum_{k=0}^{\propto }\frac{{f}^{(k)}(a)}{k!}{(x-a)}^{k} называется рядом Тейлора. http://ru.wikipedia.org/wiki/Ряд_Тейлора

Вот, например, пример вычисления функции cos(x) с помощью разложения в ряд Тейлора.
Формула:
Распределение оперативной памяти выделенной под программу

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <stdio.h>
#include <math.h>
 
#define M_PI 3.14159265358979323846
 
float fcos(int n, float xn, float fact)
{
int fct;
float nfact, coef, step, result;
 
if (n == 5)
 return 0.0;
 
fct = 2*n;
if (n == 0)
nfact = 1.0;
else if (n == 1)
nfact = fact * (float)fct;
else
nfact = fact * (float)(fct - 1) * (float)fct;
 
coef = pow( (float) -1.0, (float) n) / nfact;
step = 2.0*n;
result = coef * pow(xn, step);
 
return (result+fcos(n+1, xn, nfact));
 
}
 
int main()
{
float i;
for(i=0.0; i<1.0;i+=0.01)
{
printf("%f: %f ", i, fcos(0, i,1.0));
printf("%f\n", cos(i));
}
 
//printf("%f\n", fcos(0, 0.56,1.0));
//printf("%f\n", cos(0.56));
 
return 0;
}
Сортировка методом вставки: http://ru.wikipedia.org/wiki/Сортировка_вставками
Сортировка методом выбора: http://ru.wikipedia.org/wiki/Сортировка_выбором

При вызове функции данные помещаются в стек инструкцией push. Если конвенция вызова функций stdcall то параметры помещаются справа налево, если конвенция вызова pascal то параметры помещаются слева направо.

Например, если объявлена функция f(int a, int b) при stdcall ассемблерный листинг будет следующим
Assembler
1
2
3
push b
push a
call f
если pascal то
Assembler
1
2
3
push a
push b
call f
Таким образом основной способ обмена массивами или структурами данными это передача указателя(адреса), а не самих данных. При вызове f(int a, int b) в функции создаются локальные копии переменных. Если же f(int* a, int* b) то передаются указатели, которые позволяют изменить данные, созданные вне функции.
Не знаю, что имеется в виду под правилом соответствия формальных и фактических параметров. Может быть то, что число формальных и фактических параметров должно совпадать?

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
 
// формальные параметры
void f(int n, float xn, float);
 
int main()
{
f(0.1, 0.56, 0);
 
return 0;
}
 
// фактические параметры : n - float
void f(float n, float xn, float d)
{
printf("%f %f %f\n", n, xn, d);
}
0
0 / 0 / 0
Регистрация: 24.11.2012
Сообщений: 111
17.01.2013, 18:07  [ТС] 8
а можете также объяснить структуру одномодульной программы с использованием функций и привести пример
0
17.01.2013, 18:07
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.01.2013, 18:07
Помогаю со студенческими работами здесь

Освобождение памяти, выделенной под массив
Выделяю память под массив: int (*array_1) = new int; как освободить то, что выделил? ...

Обнулить кусок памяти (выделенной под указатели) по быстрому
Есть хеш-таблица и есть кусок памяти под неё, нужно занулить изначально весь кусок памяти, но как...

Функция не видит выделенной памяти под глобальные переменные
При решении задачи с алгоритмом поиска в глубину возникла проблема: описание переменных происходит...

Освобождение памяти, выделенной под переменную во внутренней функции
Подскажите, какая команда служит для освобождения памяти, заданной под переменную в matlab во...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

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