Сообщение Аллокация памяти и тредовый робот от 04.12.2021 18:21
Изменено 04.12.2021 18:25 avovana
Re: Аллокация памяти и тредовый робот
1. Cколько запросов на выделение памяти из кучи будет сделано при вызове каждой из данных функций?
void f1() {
std::string s = "hello world"; // const char* 12 байт // SSO < 16 байт
}
void f2() {
char const* s = "hello world"; // 12 байт // только для чтения
}
void f3() {
std::unique_ptr<int> i(new int); // int на куче - 4 байт
}
void f4() {
std::shared_ptr<int> i(new int); // 2 указателя . 1 - на выделенный объект, 2ой на счетчик
}
void f5(std::vector<int>& v, int i) { // int - в хорошем случае. size < capacity. | size == capacity => нету места для нового int. 1. аллокация. 2. переместить. 3. создать новый объект. 4. деаллцировать старую память
v.push_back(i);
}
void f6(std::list<int>& l, int i) { // new int
l.push_back(i);
}
void f7(std::vector<int>& v1, const std::vector<int>& v2) {
v1 = v2; // operator=. сравнить size(). 1. v1 size достаточно. 2. v1.clear()
}
void f8(std::list<int>& l1, const std::list<int>& l2) {
l1 = l2;
}
void f9(std::string& s1, const std::string& s2) {
s1 = s2;
}
void f10(std::vector<int>& v1, std::vector<int>& v2) { // ни одноой аллок
v1.swap(v2);
}
void f11(std::list<int>& l1, std::list<int>& l2) {
l1.swap(l2);
}
void f12(std::map<std::string, int>& m, char const* k) {
int i = m[k]; 1. constr
}
void f13() {
struct S {
const char const* s;
S(char const* const s) : s(s) {}
};
char storage[2 * sizeof(S)];
S* s = reinterpret_cast<S*>(storage);
new(s) S("hello world");
}
// Как сделать чтобы робот шагал сначала левой, потом правой, левой, правой...?
// Обобщить до 40жки, чтобы каждая нога двигалась за предыдущей
===========
int main()
{
std::thread first([]()
{
while(true)
{
std::cout << "First" << std::endl;
}
}
);
std::thread second([]()
{
while(true)
{
std::cout << "Second" << std::endl;
}
}
);
first.join();
second.join();
return 0;
}
Аллокация памяти и тредовый робот
1. Cколько запросов на выделение памяти из кучи будет сделано при вызове каждой из данных функций?
void f1() {
std::string s = "hello world"; // const char* 12 байт // SSO < 16 байт
}
void f2() {
char const* s = "hello world"; // 12 байт // только для чтения
}
void f3() {
std::unique_ptr<int> i(new int); // int на куче - 4 байт
}
void f4() {
std::shared_ptr<int> i(new int); // 2 указателя . 1 - на выделенный объект, 2ой на счетчик
}
void f5(std::vector<int>& v, int i) { // int - в хорошем случае. size < capacity. | size == capacity => нету места для нового int. 1. аллокация. 2. переместить. 3. создать новый объект. 4. деаллцировать старую память
v.push_back(i);
}
void f6(std::list<int>& l, int i) { // new int
l.push_back(i);
}
void f7(std::vector<int>& v1, const std::vector<int>& v2) {
v1 = v2; // operator=. сравнить size(). 1. v1 size достаточно. 2. v1.clear()
}
void f8(std::list<int>& l1, const std::list<int>& l2) {
l1 = l2;
}
void f9(std::string& s1, const std::string& s2) {
s1 = s2;
}
void f10(std::vector<int>& v1, std::vector<int>& v2) { // ни одноой аллок
v1.swap(v2);
}
void f11(std::list<int>& l1, std::list<int>& l2) {
l1.swap(l2);
}
void f12(std::map<std::string, int>& m, char const* k) {
int i = m[k]; 1. constr
}
void f13() {
struct S {
const char const* s;
S(char const* const s) : s(s) {}
};
char storage[2 * sizeof(S)];
S* s = reinterpret_cast<S*>(storage);
new(s) S("hello world");
}
// Как сделать чтобы робот шагал сначала левой, потом правой, левой, правой...?
// Обобщить до 40жки, чтобы каждая нога двигалась за предыдущей
===========
int main()
{
std::thread first([]()
{
while(true)
{
std::cout << "First" << std::endl;
}
}
);
std::thread second([]()
{
while(true)
{
std::cout << "Second" << std::endl;
}
}
);
first.join();
second.join();
return 0;
}