亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫
12下一頁
最近訪問板塊 發(fā)新帖
查看: 7037 | 回復(fù): 15
打印 上一主題 下一主題

[內(nèi)存管理] smaps 內(nèi)存分布 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2015-01-21 21:49 |只看該作者 |倒序?yàn)g覽
大蝦們,晚上好~

我在分析一個(gè)程序內(nèi)存波動(dòng)的時(shí)候,抓取了/proc/pid/smaps數(shù)據(jù)
發(fā)現(xiàn)有一塊64M左右的內(nèi)存,其沒有權(quán)限,但又是private
像下面這個(gè)樣子
400df000-4048c000 ---p 00000000 00:00 0

請教下這段內(nèi)存是用來干什么的?
為什么屬于當(dāng)前進(jìn)程,當(dāng)前進(jìn)程又沒有權(quán)限去rw呢?

實(shí)在不明白,,,

論壇徽章:
9
辰龍
日期:2014-08-18 20:38:42未羊
日期:2014-09-04 08:50:45丑牛
日期:2014-09-06 00:12:55寅虎
日期:2014-12-22 20:50:56摩羯座
日期:2015-01-14 22:28:15巳蛇
日期:2015-01-23 20:39:272015年辭舊歲徽章
日期:2015-03-03 16:54:1515-16賽季CBA聯(lián)賽之青島
日期:2016-03-13 23:37:1915-16賽季CBA聯(lián)賽之深圳
日期:2016-03-29 18:52:38
2 [報(bào)告]
發(fā)表于 2015-01-22 08:21 |只看該作者
這種段一般都是為了隔離其它的段,防止其它段越界訪問的。

論壇徽章:
3
射手座
日期:2014-08-18 12:15:53戌狗
日期:2014-08-22 09:53:36寅虎
日期:2014-08-22 14:15:29
3 [報(bào)告]
發(fā)表于 2015-01-22 09:44 |只看該作者
回復(fù) 1# hhuccpj


    64M? 是linux 64 bit? 那是glibc 給內(nèi)存池分配的, 64位linux glibc 會(huì)給每個(gè)線程分配一個(gè)arena, 每個(gè)arena至少有1個(gè)64M的heap, 應(yīng)該就是這個(gè)heap.

論壇徽章:
0
4 [報(bào)告]
發(fā)表于 2015-01-22 16:01 來自手機(jī) |只看該作者
今天我發(fā)現(xiàn)這塊會(huì)慢慢被修改為re-p,應(yīng)該不是保護(hù)

論壇徽章:
0
5 [報(bào)告]
發(fā)表于 2015-01-22 16:06 來自手機(jī) |只看該作者
今天我發(fā)現(xiàn)這塊內(nèi)存會(huì)滿滿被修改為rw-p?雌饋硐袷窍萴map,flag設(shè)置為空了,再然后慢慢mprotect修改。上午分析我也在想應(yīng)該是內(nèi)存池。我是64位的機(jī)子。但我內(nèi)存明明是夠的,為什么會(huì)觸發(fā)再來一塊呢?思考中,,,

論壇徽章:
3
射手座
日期:2014-08-18 12:15:53戌狗
日期:2014-08-22 09:53:36寅虎
日期:2014-08-22 14:15:29
6 [報(bào)告]
發(fā)表于 2015-01-22 16:23 |只看該作者
回復(fù) 5# hhuccpj


    小伙很有前途啊, 觀察問題很仔細(xì), 從glibc代碼來看, 的確是一開始映射的flags為0, 后來通過mprotect改成rw的
你如果用strace跟蹤應(yīng)該能抓到這個(gè)過程。

上代碼:
static heap_info *
internal_function
#if __STD_C
new_heap(size_t size, size_t top_pad)
#else
new_heap(size, top_pad) size_t size, top_pad;
#endif
{
  size_t page_mask = malloc_getpagesize - 1;
  char *p1, *p2;
  unsigned long ul;
  heap_info *h;

  if(size+top_pad < HEAP_MIN_SIZE)
    size = HEAP_MIN_SIZE;
  else if(size+top_pad <= HEAP_MAX_SIZE)
    size += top_pad;
  else if(size > HEAP_MAX_SIZE)
    return 0;
  else
    size = HEAP_MAX_SIZE;
  size = (size + page_mask) & ~page_mask;

  /* A memory region aligned to a multiple of HEAP_MAX_SIZE is needed.
     No swap space needs to be reserved for the following large
     mapping (on Linux, this is the case for all non-writable mappings
     anyway). */
  p2 = MAP_FAILED;
  if(aligned_heap_area) {
    p2 = (char *)MMAP(aligned_heap_area, HEAP_MAX_SIZE, PROT_NONE,
                      MAP_PRIVATE|MAP_NORESERVE);
    aligned_heap_area = NULL;
    if (p2 != MAP_FAILED && ((unsigned long)p2 & (HEAP_MAX_SIZE-1))) {
      munmap(p2, HEAP_MAX_SIZE);
      p2 = MAP_FAILED;
    }
  }
  if(p2 == MAP_FAILED) {
    p1 = (char *)MMAP(0, HEAP_MAX_SIZE<<1, PROT_NONE,
                      MAP_PRIVATE|MAP_NORESERVE);
    if(p1 != MAP_FAILED) {
      p2 = (char *)(((unsigned long)p1 + (HEAP_MAX_SIZE-1))
                    & ~(HEAP_MAX_SIZE-1));
      ul = p2 - p1;
      if (ul)
        munmap(p1, ul);
      else
        aligned_heap_area = p2 + HEAP_MAX_SIZE;
      munmap(p2 + HEAP_MAX_SIZE, HEAP_MAX_SIZE - ul);
    } else {
      /* Try to take the chance that an allocation of only HEAP_MAX_SIZE
         is already aligned. */
      p2 = (char *)MMAP(0, HEAP_MAX_SIZE, PROT_NONE, MAP_PRIVATE|MAP_NORESERVE);
      if(p2 == MAP_FAILED)
        return 0;
      if((unsigned long)p2 & (HEAP_MAX_SIZE-1)) {
        munmap(p2, HEAP_MAX_SIZE);
        return 0;
      }
    }
  }
  if(mprotect(p2, size, PROT_READ|PROT_WRITE) != 0) {
    munmap(p2, HEAP_MAX_SIZE);
    return 0;
  }
  h = (heap_info *)p2;
  h->size = size;
  h->mprotect_size = size;
  THREAD_STAT(stat_n_heaps++);
  return h;
}

論壇徽章:
0
7 [報(bào)告]
發(fā)表于 2015-01-22 16:44 來自手機(jī) |只看該作者
哈哈,謝謝夸獎(jiǎng),我怎么感覺有點(diǎn)飄的感覺,開個(gè)玩笑。我是想strace抓一下的,但這個(gè)問題只在高caps長時(shí)間下才發(fā)生,strace上去后性能上不去。我懷疑我用的下層平臺(tái)有人改東西了,如大家所述的話,應(yīng)該有動(dòng)態(tài)加減線程數(shù)

論壇徽章:
3
射手座
日期:2014-08-18 12:15:53戌狗
日期:2014-08-22 09:53:36寅虎
日期:2014-08-22 14:15:29
8 [報(bào)告]
發(fā)表于 2015-01-22 16:52 |只看該作者
回復(fù) 7# hhuccpj


有兩種情況glibc會(huì)創(chuàng)建新的64M heap,
一種是新建線程如果在堆上分配內(nèi)存會(huì)觸發(fā)glibc分配, 另一種是老線程前面的64M heap用光了也會(huì)新分配新的,多個(gè)heap會(huì)穿成一個(gè)鏈表。

論壇徽章:
0
9 [報(bào)告]
發(fā)表于 2015-01-22 16:57 來自手機(jī) |只看該作者
嗯,,我生日0729,比你晚一天,大哥在上,請受小弟一拜

論壇徽章:
3
射手座
日期:2014-08-18 12:15:53戌狗
日期:2014-08-22 09:53:36寅虎
日期:2014-08-22 14:15:29
10 [報(bào)告]
發(fā)表于 2015-01-22 17:31 |只看該作者
回復(fù) 9# hhuccpj


    你哪年的,還不知道誰大呢。我84
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP