如何让程序每次运行时,new出来的地址都一样?

韩雷 2019-11-11 10:24:36
比如我的程序中:
char* str = new char[128];

第一次运行程序时,str的首地址是0x12345678

第二次运行的时候,str的首地址是0x00123456

每次运行程序的时候,str的首地址都不一样。
请问,如何让每次程序运行的时候,str的首地址一样?

谢谢。
...全文
594 34 打赏 收藏 转发到动态 举报
写回复
用AI写文章
34 条回复
切换为时间正序
请发表友善的回复…
发表回复
南波儿万 2019-12-25
  • 打赏
  • 举报
回复
可以实现的,不过你得先自己写一个操作系统,然后直接读写内存就能实现了
qq_45998280 2019-12-11
  • 打赏
  • 举报
回复
做个地址映射,转换下网址
兮家小二 2019-11-23
  • 打赏
  • 举报
回复
那就不要用new的方式丫,地址一样的代表引用也是一样,那么取到的数据也是一样的,new 有什么意义,如果是容量不够,直接写 str.length = 1024 或者 str.length = 2048 扩容就好了
白夜行的狼 2019-11-22
  • 打赏
  • 举报
回复
可以自己重载new,提前开辟一段内存,然后自己来分配
Allen_OI 2019-11-19
  • 打赏
  • 举报
回复
这是什么场景下需要用到的?
北顾+ 2019-11-18
  • 打赏
  • 举报
回复
引用 27 楼 韩雷 的回复:
[quote=引用 25 楼 北顾+ 的回复:]
new可以指定地址的

怎么指定?[/quote]你百度一下c++定位new语法
哀歌与世无争 2019-11-18
  • 打赏
  • 举报
回复
new动态分配内存,动态顾名思义地址是动态的,用完就释放了。你要每次都一样还不如用全局变量,全局变量生命周期从程序开始到结束,一直独占一块内存,地址不会变。
韩雷 2019-11-18
  • 打赏
  • 举报
回复
引用 25 楼 北顾+ 的回复:
new可以指定地址的
怎么指定?
Elltor 2019-11-17
  • 打赏
  • 举报
回复
楼主,如果这个问题被解答,那么这个问题的意义是啥?
反弹态势 2019-11-15
  • 打赏
  • 举报
回复 1
只要是new出来的 地址就不一样
北顾+ 2019-11-15
  • 打赏
  • 举报
回复
new可以指定地址的
ytfhwfnh 2019-11-14
  • 打赏
  • 举报
回复
不知道为啥有这种需求,每次malloc的地址绝对值一样,这个跟系统有关吧。除非你能干涉操作系统,否则没可能。但是,如果只是相对地址每次malloc一样,可以参考内存池技术。

预先分配好整个程序所需的所有内存,然后,在其中想怎么安排地址,还不是你自己说的算。
韩雷 2019-11-14
  • 打赏
  • 举报
回复
引用 16 楼 mymtom 的回复:
windows 下确实不行,new 出来的地址,每次程序启动时都会变化
谢谢
advance_coder 2019-11-14
  • 打赏
  • 举报
回复
好奇怪的需求。你这个是new出来的!动态分配堆是没办法保证每次运行内存地址都一样的。其他程序也要new。
千梦一生 2019-11-14
  • 打赏
  • 举报
回复
这种需求很怪。实现起来好像也不对。固定地址若是被别的进程占了,那需要干涉其他进程的能力。感觉这一点有些难度。毕竟这是操作系统的权力。最好再分析需求。重想一个更合适的解决方案。如果是服务器的话。建立另外一个进程,让他霸占一个内存空间,并把这个内存看下弄成与你的进程的共享内存。然后这进程就不退出一直霸占这块内存
  • 打赏
  • 举报
回复
在现代操作系统下这明显没这种可能,
data-v-165b75c4 2019-11-14
  • 打赏
  • 举报
回复
引用 5 楼 SuperDay 的回复:
关闭随机化不现实吧?系统不是只给一个进程使用的,在两次分配之间可能已经被占用了
这个地址不是虚拟地址吗?
小灰狼 2019-11-14
  • 打赏
  • 举报
回复
引用 5 楼 SuperDay 的回复:
关闭随机化不现实吧?系统不是只给一个进程使用的,在两次分配之间可能已经被占用了
是哦 多进程多任务环境下,如果你想要的那片内存正好被别的进程先占用了,你就只能new失败了。
mymtom 2019-11-13
  • 打赏
  • 举报
回复
windows 下确实不行,new 出来的地址,每次程序启动时都会变化
lin5161678 2019-11-11
  • 打赏
  • 举报
回复
引用 10 楼 韩雷 的回复:
[quote=引用 7 楼 lin5161678 的回复:] 关闭随机作用不大 这是new 第一次运行 new 1024个int 第二次运行 需要内存更大点 new了 4M 返回的地址不一样是完全正常的 和有没有 随机化 关系不大
程序代码不变,所以每次分配的内存大小和顺序是不变的。[/quote]程序代码不变 每次new的大小可以变的 比如 new大小是通过输入获取的 第一次我输入 1024 第二次我输入 1024*1024*4 比如 我准备new一个缓冲区存文件数据 第一次文件小 第二次文件大
加载更多回复(14)

64,646

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧