Здравствуйте, smeeld, Вы писали:
S>>Неинициализированные переменные, объявленные вне цикла, а использующиеся только внутри цикла и не сохраняющие свои значения между итерациями -- это сделано, вероятно, по показаниям профайлера. Так ведь?
S>Ну и в чём тут проблема?
В том, что неинициализированная переменная -- это потенциальный источник багов. Тем более, что здесь вообще элементарно эта проблема исправляется:
node_desc_type* allocate_next_cluster_shared_segment(bool wait){
DEBUG << " Prepare to fetsh shared journal segment ... ";
shared_segment_lock_type shared_lck (shared_segment_ctrl);
check_migrate_cluster_node_store();
while(cluster_node_desc_type* node_descp = get_cluster_node(current_cluster_node++)){
if(node_descp->is_alive() and node_descp->is_idle()){
while(journal_store(node_descp->get_current_storage_chunk()).shared_descriptor_count() == 0){
if(node_descp->get_current_storage_chunk() >= get_journal_storage_chunk_count()){
break;
}else{
node_descp->set_current_storage_chunk(node_descp->get_current_storage_chunk());
node_descp->set_shared_segment(journal_store(node_descp->get_current_storage_chunk()).first_descriptor_shared());
continue;
}
}
if(node_descp->get_shared_segment() == EMPTY_SEGMENT)
continue;
void* basep = journal_store(node_descp->get_current_storage_chunk()).descriptor_table();
scatter_desc_type *descp = journal_storage(node_descp->get_current_storage_chunk()).template
get_ptr<scatter_desc_type>(basep, node_descp->get_shared_segment());
if(descp->is_shared()){
if(descp->get_created_timestamp() < init_timestamp() and descp->get_init_timestamp() < prev_timestamp()){
DEBUG << "Initializing Shared Descriptor With offset: " << descp->self();
descp->init(init_timestamp(), journal_storage_info(node_descp->get_current_storage_chunk()).first(),
journal_store(node_descp->get_current_storage_chunk()).raw_size());
}
return node_descp;
}
}
}
if(wait){
shared_segment_cv.wait(shared_lck);
if(current_cluster_node() >= journal_store().cluster_node_count())
set_current_cluster_node(FIRST_NODE_INDEX);
}
return nullptr;
}
Кроме того, слишком часто в коде повторяется вызов node_descp->get_current_storage_chunk(), что явно наводит на мысль о том, что данное значение можно закешировать. И то сделает основную часть кода гораздо компактнее.
S> Так что тут дело вкуса.
Скорее здесь имеет место чрезмерное самомнение.