Информация об изменениях

Сообщение Re[8]: 2D-Linq и оптимизация цифровых фильтров - 3 от 10.07.2018 10:38

Изменено 10.07.2018 10:45 vdimas

Re[8]: 2D-Linq и оптимизация цифровых фильтров - 3
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Здравствуйте, vdimas, Вы писали:


V>>Память в дебаге обнуляется в MSVC++.


PD>ЕМНИП не обнуляется, а туда какой-то код заносится, чтобы он по возможности исключение генерировал при попытке использовать неинициализированное значение. Помню, там что-то вроде 0xbdbdbdbd где-то было.


Предлагаю прогнать на своей рабочей Студии вот это:
#include <iomanip>
#include <iostream>

class Base {
private:
    size_t i;
};

class Derived : Base {};

template<typename T>
void test() {
    using namespace std;

    T * t = new T();
    cout << "new T():  " << hex << setfill('0') << setw(sizeof(size_t) * 2) << *(size_t*)t << std::endl;
    T * t1 = t;
    delete t1;
    cout << "delete t: " << hex << setfill('0') << setw(sizeof(size_t) * 2) << *(size_t*)t << std::endl;


    t = new T;
    cout << "new T:    " << hex << setfill('0') << setw(sizeof(size_t) * 2) << *(size_t*)t << std::endl;
    t1 = t;
    delete t1;
    cout << "delete t: " << hex << setfill('0') << setw(sizeof(size_t) * 2) << *(size_t*)t << std::endl;
}

int main()
{
    using namespace std;

    cout << "Base:" << std::endl;
    test<Base>();

    cout << std::endl;
    
    cout << "Derived:" << std::endl;
    test<Derived>();

    return 0;
}

Мои результаты:
Debug:
Base:
new T():  0000000000000000
delete t: dddddddddddddddd
new T:    cdcdcdcdcdcdcdcd
delete t: dddddddddddddddd

Derived:
new T():  0000000000000000
delete t: dddddddddddddddd
new T:    cdcdcdcdcdcdcdcd
delete t: dddddddddddddddd


Release:
Base:
new T():  0000000000000000
delete t: 0000000000000000
new T:    6e69575c32336d65
delete t: 6e69575c32336d65

Derived:
new T():  0000000000000000
delete t: 0000000000000000
new T:    4620004300000000
delete t: 4620004300000000
Re[8]: 2D-Linq и оптимизация цифровых фильтров - 3
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>ЕМНИП не обнуляется, а туда какой-то код заносится, чтобы он по возможности исключение генерировал при попытке использовать неинициализированное значение. Помню, там что-то вроде 0xbdbdbdbd где-то было.


Предлагаю прогнать на своей рабочей Студии вот это:
#include <iomanip>
#include <iostream>

class Base {
private:
    size_t i;
};

class Derived : Base {};

template<typename T>
void test() {
    using namespace std;

    T * t = new T();
    cout << "new T():  " << hex << setfill('0') << setw(sizeof(size_t) * 2) << *(size_t*)t << std::endl;
    T * t1 = t;
    delete t1;
    cout << "delete t: " << hex << setfill('0') << setw(sizeof(size_t) * 2) << *(size_t*)t << std::endl;


    t = new T;
    cout << "new T:    " << hex << setfill('0') << setw(sizeof(size_t) * 2) << *(size_t*)t << std::endl;
    t1 = t;
    delete t1;
    cout << "delete t: " << hex << setfill('0') << setw(sizeof(size_t) * 2) << *(size_t*)t << std::endl;
}

int main()
{
    using namespace std;

    cout << "Base:" << std::endl;
    test<Base>();

    cout << std::endl;
    
    cout << "Derived:" << std::endl;
    test<Derived>();

    return 0;
}

Мои результаты:
Debug:
Base:
new T():  0000000000000000
delete t: dddddddddddddddd
new T:    cdcdcdcdcdcdcdcd
delete t: dddddddddddddddd

Derived:
new T():  0000000000000000
delete t: dddddddddddddddd
new T:    cdcdcdcdcdcdcdcd
delete t: dddddddddddddddd


Release:
Base:
new T():  0000000000000000
delete t: 0000000000000000
new T:    6e69575c32336d65
delete t: 6e69575c32336d65

Derived:
new T():  0000000000000000
delete t: 0000000000000000
new T:    4620004300000000
delete t: 4620004300000000