⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 shared.cc

📁 简单的动态内存管理程序源代码
💻 CC
字号:
// file: test/pool.cc// author: Marc Bumble// Mon Aug 11, 2003// Memory allocator code for shared memory access// Copyright (C) 2003 by Marc D. Bumble//  This program is free software; you can redistribute it and/or//  modify it under the terms of the GNU General Public License//  as published by the Free Software Foundation; either version 2//  of the License, or (at your option) any later version.//  This program is distributed in the hope that it will be useful,//  but WITHOUT ANY WARRANTY; without even the implied warranty of//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the//  GNU General Public License for more details.//  You should have received a copy of the GNU General Public License//  along with this program; if not, write to the Free Software//  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.#include <shared_memory.h>#include <allocator_bit_vector.h>#include <fstream>  // for std::ofstream to()char key_val[] = "/allocate_key";char key_addr[] = "0x400d0000";int main(int argc, char **argv) {  int passed=0, failed=0;  // make sure key shared memory segment is not in use  // shm_unlink(key_val);    // mem_space::allocator_key_t key_val = "/tmp/.allocate_key";    enum {num_of_pages=1000,	page_size=8192  };  mem_space::shared<key_val, key_addr> shared_obj(num_of_pages,page_size);  std::cerr << "----------------------------------------" << std::endl;  std::cerr << "Shared memory class test. " << std::endl;  std::cerr << "\tAllocate test" << std::endl;  // allocate the first segment of memory  // zero parameter requests first unused shared memory segment.//   mem_space::memory_index_t mem_idx1 = shared_obj.allocate();  mem_space::memory_index_t mem_idx1 = shared_obj.allocate(0);  mem_space::shared_memory_header_t* smh1 =    static_cast<mem_space::shared_memory_header_t*>(mem_idx1.get_memory_ptr());  char tmp_name[mem_space::name_length];  smh1->get_key(tmp_name);  size_t str_length = strlen(key_val);  if (!strncmp(key_val,tmp_name,str_length))    passed++;  else    failed++;  // get a page of memory from the segment and write to it.  int page1 = smh1->find_free_pages(1);  // mark page as taken  smh1->mark_pages(page1,1);  // wrote to page, so sync memory  smh1->sync();  bool val = smh1->assigned(page1);  if (val)    passed++;			// page registered as assigned.  else    failed++;  // determine page offset to memory from start of segment  int offset1 = smh1->get_page_offset(page1);  // get pointer to actual memory  char* char_test =    static_cast<char*>(mem_idx1.get_memory_ptr()) +		       offset1;  const char char_test_str[] = "Memory test string";  strcpy(char_test,char_test_str);  std::cerr << "\tCopy Constructor Test" << std::endl;  mem_space::shared<key_val, key_addr> shared_obj2(shared_obj);  // attached to the allocated the segment of memory  const int& proj_id1 = mem_idx1.get_proj_id();  // not retrieve the same shared memory segment using the proj_id  val = smh1->assigned(page1);  mem_space::memory_index_t mem_idx2 =    shared_obj2.allocate(proj_id1);//     shared_obj2.allocate();  val = smh1->assigned(page1);  mem_space::shared_memory_header_t* smh2 =    static_cast<mem_space::shared_memory_header_t*>(mem_idx2.get_memory_ptr());  smh2->get_key(tmp_name);  str_length = strlen(key_val);  if (!strncmp(key_val,tmp_name,str_length))    passed++;  else    failed++;  // now check the state of the page marked earlier using the other  // segment pointer  smh2->sync();  smh1->sync();  val = smh1->assigned(page1);  if (val)    passed++;			// page registered as assigned.  else    failed++;  val = smh2->assigned(page1);  if (val)    passed++;			// page registered as assigned.  else    failed++;  // determine page offset to memory from start of segment  int offset2 = smh2->get_page_offset(page1);  // get pointer to actual memory  char_test =    static_cast<char*>(mem_idx2.get_memory_ptr()) +		       offset2;  if (!strcmp(char_test_str,char_test))    passed++;  else    failed++;  std::cerr << "\tAssignment Test" << std::endl;  mem_space::shared<key_val, key_addr> shared_obj3(shared_obj);  // call destructors to eliminate semaphores  std::cerr << "\tFree test" << std::endl;//   int shared_memory_addr1 = smh1->get_shared_memory_addr();//   int shared_memory_size1 = smh1->get_shared_memory_size();//   int shared_memory_addr2 = smh2->get_shared_memory_addr();//   int shared_memory_size2 = smh2->get_shared_memory_size();//   shared_obj.free();//   //  if (shared_memory_addr1 != shared_memory_addr2)//   shared_obj2.free();  std::cerr << "Passed: " << passed << std::endl;  std::cerr << "Failed: " << failed << std::endl;  std::cerr << "----------------------------------------" << std::endl;      return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -