Форум программистов, компьютерный форум CyberForum.ru

Расскажите про new и delete в C++ - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Теория, Общая http://www.cyberforum.ru/cpp-beginners/thread59009.html
Добрый день! На днях видел в этой ветке в примере кода на С цикл такого вида: for (unsigned int i=0; i<10;++i) {...} Это было сделано во всех практически циклах по ходу программы, т.е неоднократно. Прошу пояснить, есть ли какая-то сакральная тайна в том, что бы нажимать дополнительных 9 клавиш, что бы написать UNSIGNED если цикл не планируется затягивать на более чем 30 000...
C++ Три задачи для чайника. Помогите пожалуйста решить пару задач. 1.Определить третью справа цифру натурального числа N 2.Определить три наибольших элемента одномерного массива 3.Упорядочить строки матрицы по неубыванию количества одинаковых элементов в строке. http://www.cyberforum.ru/cpp-beginners/thread58976.html
Удаление столбца в массиве C++
Помогите пожалуйста, как можно удалить из двумерного массива N x M столбцов которые содержат нули?
Преобразовать строку в float C++
Итак у меня есть переменная Char. В ней записано '5.2'. И есть переменная float. Как мне поместить 5.2 в переменную типа float ? Типа функции в VB (a=Val(Text1.Text))...
C++ Нахождение простых чисел в массиве http://www.cyberforum.ru/cpp-beginners/thread58918.html
Ввести 20 чесел в массив и найти среди них все простые числа Пожалйста помогите :( Буду оч благодарна
C++ Найти площадь кольца, внутренний радиус которого равен r, а внешний — R (R> r). Ребят, как решить задачу,: Найти площадь кольца, внутренний радиус которого равен r, а внешний — R (R> r). Тут сначало над знать формулу круга, и по ней все делать...а как это все подробно записать? Я профан в этом деле( подробнее

Показать сообщение отдельно
Evg
Эксперт CАвтор FAQ
17259 / 5513 / 342
Регистрация: 30.03.2009
Сообщений: 15,010
Записей в блоге: 26
26.10.2009, 16:14     Расскажите про new и delete в C++
Цитата Сообщение от niXman Посмотреть сообщение
Так это в компайл-тайм. (или нет? )
Компайл-тайм никто в принципе не рассматривает. Речь идёт только о генерируемом коде

Добавлено через 9 минут
Грубо говоря, когда ты делаешь запись НЕбитового поля, то это выражается в одну операцию записи в память. Когда делаешь запись битового поля, то сначала нужно прочитать из памяти подложку (а любая операция чтения из памяти - это само по себе уже не быстро, особенно, если данных в кэше не оказалось), при помощи битовых операций втиснуть в подложку битовое поле, а потом модифицированную подложку записать в память

Да хоть по ассемблерной выдаче сравни два варианта. Палками выделаю непосредственно операцию записи поля. Сначала обычное поле

C
1
2
3
4
5
6
7
8
9
10
struct s
{
  int x;
};
 
void
func (struct s *p, int val)
{
  p->x = val;
}
Код
func:
        pushl   %ebp
        movl    %esp, %ebp
        movl    12(%ebp), %edx
        movl    8(%ebp), %eax
        -----------
        movl    %edx, (%eax)
        -----------
        popl    %ebp
        ret
Теперь битовое. Самый общий вариант (поле не прижато)

C
1
2
3
4
5
6
7
8
9
10
11
12
struct s
{
  int  :1;
  int x:30;
  int  :1;
};
 
void
func (struct s *p, int val)
{
  p->x = val;
}
Код
func:
        pushl   %ebp
        movl    %esp, %ebp
        movl    8(%ebp), %ecx
        movl    12(%ebp), %edx
        -----------
        movl    (%ecx), %eax       <--- читаем подложку
        andl    $0x7ffffffe, %edx  <--- в записываемом значении обнуляем биты, которые мимо поля
        andl    $0x80000001, %eax  <--- в подложке обнуляем биты, соотвествующие полю
        orl     %edx, %eax         <--- записываем значение в подложку
        movl    %eax, (%ecx)       <--- записываем модифицированную подложку
        -----------
        popl    %ebp
        ret
 
Текущее время: 10:28. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru