织梦dedecms响应式精密机械模具公司网站模板(自适应手机移动端)
模板介紹:
織夢最新內核開發的模板,該模板屬于企業通用、精密儀器、模具類企業都可使用,
這款模板使用范圍極廣,不僅僅局限于一類型的企業,你只需要把圖片和產品內容;
換成你的,顏色都可以修改,改完讓你耳目一新的感覺!
自帶最新的手機移動端,同一個后臺,數據即時同步,簡單適用!
原創設計、手工書寫DIV+CSS,
完美兼容IE7+、Firefox、Chrome、360瀏覽器等;主流瀏覽器;
頁面簡潔簡單,容易管理,DEDE內核都可以使用;附帶測試數據!
模板特點:
1.一款利于SEO的模板,手工CSS+DIV,圖片ALT,H系列標簽已合理運用。
2.同步手機站功能,手機站很強大。
模板頁面:
index.htm 首頁模板
head.htm
footer.htm
article_article.htm 文章內容
這里不一一列出!
溫馨提示:
按照正常的織夢安裝步驟來安裝還原就可以用了,從后臺重新點擊保存下系統基本參數。 系統>系統基本參數> 保存(確定)。
文件:n459.com/file/25127180-477760207
以下內容無關:
-------------------------------------------分割線---------------------------------------------
Redis 設計與實現 3:字符串 SDS
在 Redis 中,字符串都用自定義的結構簡單動態字符串(Simple Dynamic Strings,SDS)。
Redis 中使用到的字符串都是用 SDS,例如 key、string 類型的值、sorted set 的 member、hash 的 field 等等等等。。。
數據結構
舊版本的結構
在 3.2 版本之前,sds 的定義是這樣的:
struct sdshdr {
// buf 數組中已使用的字節數量,也就是 sds 本身的字符串長度
unsigned int len;
// buf 數組中未使用的字節數量
unsigned int free;
// 字節數組,用于保存字符串
char buf[];
};
舊版本 SDS 結構示例
這樣的結構有幾個好處:
單獨記錄長度len,獲取字符串長度的時間復雜度是 O(1) 。傳統的 C 字符串獲取長度需要遍歷字符串,直到遇到\0,時間復雜度是 O(N)。
buf 數組末尾遵循 C 字符串以 \0 結尾的慣例,可以兼容 C 處理字符串的函數。
減少修改字符串帶來的內存重分配次數,Redis 使用了 空間預分配(預先申請大一點點的空間) 和 空間惰性釋放(字符串變短修改len字段即可)來減少字符串修改引起的內存重新分配。
不以\0為結尾的判斷,二進制安全。因為圖片等二進制數據中,可能包含\0,傳統 C 字符串一遇到 \0 就認為字符串結束了,會導致不能完整保存。
缺點:
len 和 free 的定義用了 4 個字節,可以表示 2^32 的長度。但是我們實際使用的字符串,往往沒有那么長。4 個字節造成了浪費。
新版本的結構
舊版本中我們說到,len 和 free 的缺點是用了太長的變量,新版本解決了這個問題。
我們來看一下新版本的 SDS 結構。
在 Redis 3.2 版本之后,Redis 將 SDS 劃分為 5 種類型:
類型 字節 位
sdshdr5 < 1 <8
sdshdr8 1 8
sdshdr16 2 16
sdshdr32 4 32
sdshdr64 8 64
新版本新增加了一個 flags 字段來標識類型,長度 1 字節(8 位)。
類型只占用了前 3 位。在 sdshdr5 中,后 5 位用來保存字符串的長度。其他類型后 5 位沒有用。
struct attribute ((packed)) sdshdr5 {
unsigned char flags; /* 前 3 位保存類型,后 5 位保存字符串長度 /
char buf[];
};
struct attribute ((packed)) sdshdr8 {
uint8_t len; / 字符串長度,1 字節 8 位 /
uint8_t alloc; / 申請的總長度,1 字節 8 位 /
unsigned char flags; / 前 3 位保存類型,后 5 位未使用 /
char buf[];
};
struct attribute ((packed)) sdshdr16 {
uint16_t len; / 字符串長度,2 字節 16 位 /
uint16_t alloc; / 申請的總長度,2 字節 16 位 /
unsigned char flags; / 前 3 位保存類型,后 5 位未使用 /
char buf[];
};
struct attribute ((packed)) sdshdr32 {
uint32_t len; / 字符串長度,4 字節 32 位 /
uint32_t alloc; / 申請的總長度,4 字節 32 位 /
unsigned char flags; / 前 3 位保存類型,后 5 位未使用 /
char buf[];
};
struct attribute ((packed)) sdshdr64 {
uint64_t len; / 字符串長度,8 字節 64 位 /
uint64_t alloc; / 申請的總長度,8 字節 64 位 /
unsigned char flags; / 前 3 位保存類型,后 5 位未使用 */
char buf[];
};
舊版本 SDS 結構示例
優點:
舊版本相對于傳統 C 字符串的優點,新版本都有
相對于舊版本,新版本可以通過字符串的長度,選擇不同的結構,可以節約內存
使用 attribute ((packed)) ,讓編譯器取消結構在編譯過程中的優化對齊,按照實際占用字節數進行對齊,可以節約內存
SDS 的初始化
sds 的定義,跟傳統的C語言字符串保持類型兼容 char *。但是 sds 是二進制安全的,中間可能包含\0。
sds.h
typedef char *sds;
sds.c
// 初始化 sds
sds sdsnewlen(const void *init, size_t initlen) {
// 指向 sdshdr 開始地方的指針
void *sh;
// sds 實際是一個指針,指向 buf 開始的位置
sds s;
// 根據初始化的長度,返回 sds 的類型
char type = sdsReqType(initlen);
// initlen == 0,是空字符串,空字符串往往就是用來往后添加字節的,使用 SDS_TYPE_8 比 SDS_TYPE_5 更好
if (type == SDS_TYPE_5 && initlen == 0) type = SDS_TYPE_8;
// 根據類型獲取 struct sdshdr 的長度
int hdrlen = sdsHdrSize(type);
// flags 字段的指針
unsigned char *fp;
}
SDS 的擴/縮容
擴容
擴容就不跟初始化一樣寫注釋寫得那么詳細了,直接拉最重要的幾句代碼就行。
sds sdsMakeRoomFor(sds s, size_t addlen) {
// #define SDS_MAX_PREALLOC (1024*1024)
// 當新的長度小于 1M 的時候,長度會增長一倍
// 當新的長度達到 1M 之后,最多就增長 1M 了
if (newlen < SDS_MAX_PREALLOC)
newlen *= 2;
else
newlen += SDS_MAX_PREALLOC;
// …
}
縮容
sds 縮短不會真正縮小 buf,而是只改長度而已,類型也不變。
sds.c
// 刪掉字符串的左右字符中指定的字符
sds sdstrim(sds s, const char *cset) {
char *start, *end, *sp, *ep;
size_t len;
}
sds.h
static inline void sdssetlen(sds s, size_t newlen) {
// 設置sds長度,只是修改 sdshdr 結構中的長度字段,類型不會變
unsigned char flags = s[-1];
switch(flags&SDS_TYPE_MASK) {
case SDS_TYPE_5:
{
unsigned char fp = ((unsigned char)s)-1;
*fp = (unsigned char)(SDS_TYPE_5 | (newlen << SDS_TYPE_BITS));
}
break;
case SDS_TYPE_8:
SDS_HDR(8,s)->len = (uint8_t)newlen;
break;
case SDS_TYPE_16:
SDS_HDR(16,s)->len = (uint16_t)newlen;
break;
case SDS_TYPE_32:
SDS_HDR(32,s)->len = (uint32_t)newlen;
break;
case SDS_TYPE_64:
SDS_HDR(64,s)->len = (uint64_t)newlen;
break;
}
}
總結
以上是生活随笔為你收集整理的织梦dedecms响应式精密机械模具公司网站模板(自适应手机移动端)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Yoyo OS安装过程
- 下一篇: 用HTML+bootstrap制作个人简