C_and_CPP 板


LINE

※ 引述《pikachu123 (pika)》之铭言: : 请问各位高手~~~~~~~~~~~~ : 就是阿C++宣告了一个整数变数 : 例如:int a; : 这时候系统不是就会分配记忆体给a~~~ : 我想问说可以步让让系统分配记体体位置~~~ : 我自己来分配特定空间给它~~~~ : C++做得到吗~~~ : 问了个奇怪的问题@@ 如同 yoco 所说的,C++ 本身并不提供这一个层次的能力 如果你想动态配置一块记忆体 并希望这块记忆体,配在你自己订定的位址上 光用 malloc 没有办法做到 因为 malloc 根本就没有提供「自订配置区块起始位址」的参数 至於 OS 提供的 API 可能就会有提供这个功能 (或类似) 例如 Win32 API "VirtualAlloc",这 API 的细节可查 MSDN VirtualAlloc 主要可以自己配置 virtual memory page 配置出来的记忆体起始位址,可由系统自动判定,或者自行"建议" 如果自行建议的位址已经被配置给其他区块 或者该位址不能被存取 (例如 user mode 程式要直接配置到 system address space) 则 VirtualAlloc 就会失败 刚才写了一小段程式 功能是尝试配置 4096 bytes 到 0x400000 和 0x700000 这两个位址上 参考一下,看看这对你程式的需求有没有帮助罗~ #include <windows.h> #include <stdio.h> void TestAlloc(PVOID expectedAddr){ PVOID returnedAddr = VirtualAlloc( expectedAddr,4096,MEM_RESERVE|MEM_COMMIT,PAGE_READWRITE); printf("Test : %p\n\t",expectedAddr); if (returnedAddr == expectedAddr){ sprintf((PSTR)returnedAddr,"returnedAddr == %p",returnedAddr); puts((PSTR)returnedAddr); VirtualFree(returnedAddr,4096,MEM_FREE); }else printf("failed to allocate a page at %p, GLE=%d\n", expectedAddr,GetLastError()); } int main(){ TestAlloc((PVOID)0x400000); TestAlloc((PVOID)0x700000); return 0; } =================== 在我电脑跑的 output =================== Test : 00400000 failed to allocate a page at 00400000, GLE=487 Test : 00700000 returnedAddr == 00700000 ------------------------------------------------------- 试 0x400000 本来就是有很大的机率会失败 因为多数 process 会把执行档 map 到这个位址 这个自己写的测试程式应该也是 (还有例如 MSN - msnmsgr.exe;PCMan - PCMan.exe) 配到 0x700000 的话 如果该位址上还没有被使用,基本上就可以配置成功 不过你也可能测出来失败,原因的话查那个 GetLastError() 回传值就可以了 总之可以自己改改看,实验一下罗~ --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.70.137.117 ※ 编辑: UNARYvvv 来自: 61.70.137.117 (05/07 01:02)
1F:推 pikachu123:想问一下那LINUX上呢@@? 05/07 06:43







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:BuyTogether站内搜寻

TOP