Size: a a a

2021 February 11

AM

Aleksander Mironov in supapro.cxx
Ilia Zviagin
Имеет. Паддинг, выравнивание
Паддинг в расчет не берем  - его можно руками задать вроде и точно знать.
источник

ר

רחפ in supapro.cxx
Aleksander Mironov
Наверно я дурак и не правильно вопрос поставил изначально.
Имеет ли право компилятор напихать че своего в начало памяти занимаемой экземпляром класса, в его середину.
Перемешать поля местами и тп?
Перемешать поля может, но это если такой компилятор или если установлен макрос #pack, в gcc по умолчанию не мешает местами
источник

IZ

Ilia Zviagin in supapro.cxx
רחפ
Почему нет, ведь такой способ применятся в linux коде и coreboot. Или я неверно понял?
И чё? Ну применяется, ну UB там, ну работает оно НА КОНКРЕТНОМ КОМПИЛЕ И ПЛАТФОРМЕ, с конкретными параметрами сборки . А на других -- не будет.
источник

IZ

Ilia Zviagin in supapro.cxx
Aleksander Mironov
Паддинг в расчет не берем  - его можно руками задать вроде и точно знать.
нет
источник

IZ

Ilia Zviagin in supapro.cxx
רחפ
Перемешать поля может, но это если такой компилятор или если установлен макрос #pack, в gcc по умолчанию не мешает местами
Это опять мимо стандартных , как это -- ХОРОШИХ в общем программ.
#pack -- это прагма, НЕ стандартная.
источник

IZ

Ilia Zviagin in supapro.cxx
רחפ
Перемешать поля может, но это если такой компилятор или если установлен макрос #pack, в gcc по умолчанию не мешает местами
ГЛАВНОЕ: нафига так бегать в структуре от байта к байту,
если можно достаточно легко вычислить байтовое смещение каждого члена структуры относительно
базового адреса, и уже по этому смещению обращаться?
источник

IZ

Ilia Zviagin in supapro.cxx
Это всем ответ, не только @rhphlmat
источник

AM

Aleksander Mironov in supapro.cxx
Ilia Zviagin
ГЛАВНОЕ: нафига так бегать в структуре от байта к байту,
если можно достаточно легко вычислить байтовое смещение каждого члена структуры относительно
базового адреса, и уже по этому смещению обращаться?
взаимодействие между устройств.
источник

IZ

Ilia Zviagin in supapro.cxx
Aleksander Mironov
взаимодействие между устройств.
И ?
источник

AM

Aleksander Mironov in supapro.cxx
Да нет уже и - понятно.
Просто так бы пихал побайтно от и до конца. А так надо морочится.
источник

IZ

Ilia Zviagin in supapro.cxx
Aleksander Mironov
Да нет уже и - понятно.
Просто так бы пихал побайтно от и до конца. А так надо морочится.
чё там морочится? написал один раз функцию вычисляющую смещение мембера -- и всё.
Да и наверняка есть такая уже либо в бусте, либо в стандарте
источник

D

Dmitriy in supapro.cxx
Ilia Zviagin
чё там морочится? написал один раз функцию вычисляющую смещение мембера -- и всё.
Да и наверняка есть такая уже либо в бусте, либо в стандарте
offsetof?
источник

ר

רחפ in supapro.cxx
Ilia Zviagin
ГЛАВНОЕ: нафига так бегать в структуре от байта к байту,
если можно достаточно легко вычислить байтовое смещение каждого члена структуры относительно
базового адреса, и уже по этому смещению обращаться?
Ок, тогда если допустим, есть тип void*, метод принимает этот тип.
И чтобы распарсить этот тип как структуру, то есть вытащить данные из void* в другие переменные.
То здесь ведь будет работать способ (база + sizeof(тип)) и так далее присваивать и прибавлять?
источник

IZ

Ilia Zviagin in supapro.cxx
רחפ
Ок, тогда если допустим, есть тип void*, метод принимает этот тип.
И чтобы распарсить этот тип как структуру, то есть вытащить данные из void* в другие переменные.
То здесь ведь будет работать способ (база + sizeof(тип)) и так далее присваивать и прибавлять?
Это вообще невозможно, *(void*) -- не тип
источник

IZ

Ilia Zviagin in supapro.cxx
Причём, ни в С, ни в С++.
Надо преобразовать в указатель на тип
источник

ר

רחפ in supapro.cxx
Ilia Zviagin
Это вообще невозможно, *(void*) -- не тип
Точнее указатель), то есть при вызове метода подавался как (void*)структура.
источник

IZ

Ilia Zviagin in supapro.cxx
רחפ
Ок, тогда если допустим, есть тип void*, метод принимает этот тип.
И чтобы распарсить этот тип как структуру, то есть вытащить данные из void* в другие переменные.
То здесь ведь будет работать способ (база + sizeof(тип)) и так далее присваивать и прибавлять?
И вообще что это значит распарсить этот тип как структуру -- структура не текст, чтобы её парсить.
Это уже готовая форма в памяти
источник

ר

רחפ in supapro.cxx
Ilia Zviagin
И вообще что это значит распарсить этот тип как структуру -- структура не текст, чтобы её парсить.
Это уже готовая форма в памяти
Имеется в виду создать прототип структуры с другим именем, то есть мы не знаем имя предыдущей, только порядок типов, и в нее считать данные используя в основе только указатель void* и смещение.
источник

V

Vlados in supapro.cxx
Здравствуйте, в чём проблема может быть?Это пишет в консоли:                         terminate called after throwing an instance of 'std::out_of_range'
 what():  basic_string::erase: __pos (which is 42) > this->size() (which is 7)
источник

V

Vlados in supapro.cxx
#include <iostream>
#include <cmath>
#include <cstring>
using namespace std;
int main(){
 setlocale(LC_ALL, "Russian");
string s;
int n,k=0;
cout<<"Введите набор букв: "; getline(cin,s);
n = s.length();
for(int i=0; i<=n; i++){
 if(s[i] == '*'){
   s.erase(s[i]);
   n--;
 }
}

cout<<"Колич  : "<<s<<endl;
}
источник