內存池中的嵌入式指針

嵌入式指針 可以union改struct 內存分配后 next指針就沒用了 直接作為數據空間比較省內存 因為對指針指向的內存存儲的時候 編譯器是不管你是什么類型的 ,這里有道練習題可以對指針的概念稍微理解一下:

#include <iostream>
using  std::cout;
using  std::endl;
class A
{
public:int j = 5;int i = 1;void exec() { i = 2; }
};
class B
{
public:int i = 3;int j = 6;void exec() { i = 4; }
} ;
int main(){A a;B *bp = (B *)&a;B b = *bp;cout<<a.i << bp->i << b.i<<endl;bp->exec();cout<<a.i <<bp->i << b.i<<endl ;b.exec();cout<<a.i << bp->i << b.i<<endl ;
}

由于嵌入式指針節省內存的特點 幾乎所有的內存池都會使用
內存池一般不是為了提高效率而是為了減少cookie,設想一下節省100萬個指針的存儲會節省多少空間。
請添加圖片描述

#include<iostream>
using namespace std;
class TestEP
{
public:int m_i;int m_j;public:struct obj //結構        //定義一個類型,不放在外部,污染全局變量{//成員,是個指針struct obj* next;  //這個next就是個嵌入式指針//自己是一個obj結構對象,那么把自己這個對象的next指針指向 另外一個obj結構對象,最終,把多個自己這種類型的對象通過鏈串起來;};
};int main()
{TestEP mytest;cout << sizeof(mytest) << endl; //8TestEP::obj* ptemp;  //定義一個指針ptemp = (TestEP::obj*)&mytest; //把對象mytest首地址給了這個指針ptemp,這個指針ptemp指向對象mytest首地址;cout << sizeof(ptemp->next) << endl; //4cout << sizeof(TestEP::obj) << endl; //4ptemp->next = nullptr;return 1;
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/447075.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/447075.shtml
英文地址,請注明出處:http://en.pswp.cn/news/447075.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C++ 標準程序庫std::string 詳解

現在一般不再使用傳統的char*而選用C標準程序庫中的string類&#xff0c;是因為string標準程序和char*比較起來&#xff0c;不必擔心內存是否足夠、字符串長度等等&#xff0c;而且作為一個類出現&#xff0c;集成的操作函數足以完成大多數情況下(甚至是100%)的需要。比如&…

內存池的實現4 alloc內存池

alloc 內存池 優點: &#xff1a;本質是定長內存池的改進&#xff0c;分配和釋放的效率高。可以解決一定長度內存分配的問題。 缺點 &#xff1a;存在內碎片的問題&#xff0c;且將一塊大內存切小以后&#xff0c;申請大內存無法使用&#xff0c;別的FreeList掛了很多空閑的內存…

C++primer第15章節詳解面向對象程序設計

前言 面向程序設計基于三個基本概念&#xff1a;數據抽象、繼承和動態綁定。繼承和動態綁定可以使得程序定義與其他類相似但是不完全相同的類&#xff1b;使用彼此相似的類編寫程序時候&#xff0c;可以在一定程度上忽略掉他們的區別。 OOP概述 oop&#xff08;面向程序的設…

內存池的線程安全問題

malloc/free 據說老版本libc 有倆個版本&#xff0c;當你連接 pthread庫的時候它就鏈接的是線程安全版&#xff0c;否則不是。在glic 2.2 以上無論怎么都是線程安全的。 new/delete new/delete 封裝的 malloc/free , 如果malloc/free 是它們就是線程安全的。

C++11命名空間的using說明

std::cin 表示從標準輸入讀取內容&#xff0c;此處的作用域操作符::是指編譯器應該從左側名字所示的作用域中尋找右側那個名字。因此std::sin表示使用命名空間std中的cin。 每個名字都需要有獨立的using的聲明 每一個using聲明引入命名空間中的一個成員&#xff0c;比如可以將…

c語音的一些特殊關鍵字

PRETTY_FUNCTION C語言中獲取函數名 C語言中的__LINE__用以指示本行語句在源文件中的位置信息

C++ primer三章二節標準庫類型string

標準庫類型string 標準庫類型string表示可變長的字符序列&#xff0c;使用#include<string>引入頭文件&#xff0c;string定義在命名空間std中。 定義和初始化string對象 如何初始化類的對象是由類的本身決定的&#xff0c;類可以定義很多初始化對象的方式&#xff0c;…

vim 不常見但好用的命令

● 跳躍 ○ 向前跳躍是 f ○ 向后跳躍是 F ● 繼續 ○ 保持方向是 ; ○ 改變方向是 , ● 可以加上 [count] 來加速 ● ^ 是到本行第一個非空字符 ● 0 是到本行第一個字符&#xff0c;不管是不是空格 ● g_ 是到本行最后一個非空字符 ● 兩個按鍵要依次按下 ● $ 跳到本行最后…

加密機組會 會議紀要

2020年9月28日 1&#xff0c;使用基類繼承的機制&#xff0c;調用寫好的函數接口 1&#xff0c;不要 使用Content&#xff08;封裝數據&#xff0c;本質是一個json字符串&#xff09;&#xff0c;1&#xff0c;因為每次使用這個需要對里面的內容進行序列化&#xff0c;轉化成…

c++為什么沒有垃圾回收

垃圾回收 內存清理的另一個方面是垃圾回收。在支持垃圾回收的環境中&#xff0c;程序員幾乎不必顯式地釋放與對象關聯的 內存。運行時庫會在某時刻自動清理沒有任何引用的對象。 與C#和Java不一樣&#xff0c;在C語言中沒有內建垃圾回收。在現代C中&#xff0c;使用智能指針管理…

C++ Vecctor容器淺析

Vector的定義 向量&#xff08;Vector&#xff09;是一個封裝了動態大小數組的順序容器&#xff08;Sequence Container&#xff09;。跟任意其它類型容器一樣&#xff0c;它能夠存放各種類型的對象。可以簡單的認為&#xff0c;向量是一個能夠存放任意類型的動態數組。vector…

C++primer第二章2.4節對于const限定符相關內容進行詳解

const限定符 const對象一旦創建后其數值就不會被再次改變&#xff0c;因此const對象必須初始化。const對象只在文件中有效在不同的文件中使用不同的const來定義不同的常量&#xff0c;那么每個文件定義的變量只會在自己所屬的文件中有效。如果想讓多個文件共享同一個const變量…

二分法的常見問題

mid(leftright)/2; mid (high - low) / 2 low; 這樣寫可以防止left right溢出 ,不過數足夠大是時候該溢還是溢 為什么要取右邊中間數呢&#xff1f;這是因為在區間里 只有 2 個元素的時候&#xff0c;把[left…right]劃分成[left…mid - 1]和[mid…right]這兩個區間&#x…

演示IPFS的一個完整的流程以及針對部分概念的詳解

整體的流程 1&#xff0c;創建ipfs節點 通過ipfs init在本地計算機建立一個IPFS節點本文有些命令已經執行過了&#xff0c;就沒有重新初始化。部分圖片拷貝自先前文檔&#xff0c;具體信息應以實物為準 $ ipfs init initializing IPFS node at /Users/CHY/.ipfs generating 2…

c++ 算法的時間復雜度

一般ACM或者筆試題的時間限制是1秒或2秒。 在這種情況下&#xff0c;C代碼中的操作次數控制在 10^7為最佳。 下面給出在不同數據范國下&#xff0c;代碼的時間復雜度和算法該如何選擇&#xff1a; 1.n≤ 30,指數級別&#xff0c;dis剪枝&#xff0c;狀態壓縮dp 2.n < 100 &g…

簡單工廠模式實現計算器

#include <iostream> #include <vector> #include <string> #include <iostream> #include <map> using namespace std; #define __THROW_ZERO do {cerr << "The dividend is 0" << endl; exit(1);}while(0);/* 簡單工廠處…

TDengine安裝教程

TDengine安裝教程 前言 TDengine的安裝十分簡單&#xff0c;可以有以下三種安裝方式&#xff0c;源碼安裝、通過Docker容器進行安裝、通過安裝包進行安裝。但是使用源碼安裝較為復雜&#xff0c;通過docker的方式最為簡單&#xff0c;但是需要一定docker相關的知識&#xff0…

C++中size_t的學習

size_t的定義 size_t是一種數據相關的無符號類型&#xff0c;它被設計得足夠大以便能夠存儲內存中任意對象的大小。設計 size_t 就是為了適應多個平臺&#xff0c;size_t等效于unsigned short int 或者 unsigned long int 類型&#xff0c;這個過程是動態匹配的。在需要通過數…

策略模式解決商店打折問題

#include <bits/stdc.h> using namespace std; /*策略模式解決商店打折問題*/class Cashsuper { private:/* data */ public:virtual double addcash(double cash) 0;double Getresult(double money){return addcash(money);} };class Cashnormal : public Cashsuper {p…

android 軟件首次運行時引導頁左右滑動效果

很多手機軟件在安裝后首次運行都會進入到引導頁面&#xff0c;再次運行時會進入到主頁面。 多了不說了&#xff0c;先看效果圖&#xff1a; 代碼如下&#xff1a; main.xml <?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:an…